Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _CFEATURES__H__
00013 #define _CFEATURES__H__
00014
00015 #include "lib/common.h"
00016 #include "lib/File.h"
00017 #include "base/SGObject.h"
00018 #include "preproc/PreProc.h"
00019 #include "features/FeatureTypes.h"
00020
00021 namespace shogun
00022 {
00023 class CFile;
00024 class CPreProc;
00025 class CKernel;
00026 enum EFeatureType;
00027 enum EFeatureClass;
00028 enum EFeatureProperty;
00029 }
00030
00031 namespace shogun
00032 {
00033
00053 class CFeatures : public CSGObject
00054 {
00055 public:
00060 CFeatures(int32_t size=0);
00061
00063 CFeatures(const CFeatures& orig);
00064
00069 CFeatures(CFile* loader);
00070
00077 virtual CFeatures* duplicate() const=0 ;
00078
00079 virtual ~CFeatures();
00080
00087 virtual EFeatureType get_feature_type()=0;
00088
00095 virtual EFeatureClass get_feature_class()=0;
00096
00102 virtual int32_t add_preproc(CPreProc* p);
00103
00109 virtual CPreProc* del_preproc(int32_t num);
00110
00115 CPreProc* get_preproc(int32_t num);
00116
00121 inline void set_preprocessed(int32_t num) { preprocessed[num]=true; }
00122
00127 inline bool is_preprocessed(int32_t num) { return preprocessed[num]; }
00128
00133 int32_t get_num_preprocessed();
00134
00139 inline int32_t get_num_preproc() { return num_preproc; }
00140
00142 void clean_preprocs();
00143
00148 inline int32_t get_cache_size() { return cache_size; };
00149
00156 virtual int32_t get_num_vectors()=0 ;
00157
00166 virtual bool reshape(int32_t num_features, int32_t num_vectors) { return false; }
00167
00174 virtual int32_t get_size()=0;
00175
00177 void list_feature_obj();
00178
00183 virtual void load(CFile* loader)
00184 {
00185 SG_NOTIMPLEMENTED;
00186 }
00187
00192 virtual void save(CFile* writer)
00193 {
00194 SG_NOTIMPLEMENTED;
00195 }
00196
00202 bool check_feature_compatibility(CFeatures* f);
00203
00209 inline bool has_property(EFeatureProperty p) { return (properties & p) != 0; }
00210
00215 inline void set_property(EFeatureProperty p)
00216 {
00217 properties |= p;
00218 }
00219
00224 inline void unset_property(EFeatureProperty p)
00225 {
00226 properties &= (properties | p) ^ p;
00227 }
00228 #ifdef HAVE_BOOST_SERIALIZATION
00229 private:
00230
00231 friend class ::boost::serialization::access;
00232 template<class Archive>
00233 void save(Archive & ar, const unsigned int archive_version) const
00234 {
00235
00236 SG_DEBUG("archiving Features\n");
00237
00238 ar & ::boost::serialization::base_object<CSGObject>(*this);
00239
00240 ar & properties;
00241 ar & cache_size;
00242 ar & num_preproc;
00243
00244
00245
00246 for (int i=0; i < num_preproc; ++i) {
00247 ar & preprocessed[i];
00248 }
00249
00250 SG_DEBUG("done archiving Features\n");
00251
00252 }
00253
00254 template<class Archive>
00255 void load(Archive & ar, const unsigned int archive_version)
00256 {
00257
00258 SG_DEBUG("archiving Features\n");
00259
00260 ar & ::boost::serialization::base_object<CSGObject>(*this);
00261
00262 ar & properties;
00263 ar & cache_size;
00264 ar & num_preproc;
00265
00266
00267
00268
00269 if (num_preproc > 0)
00270 {
00271 preprocessed = new bool[num_preproc];
00272 for (int i=0; i< num_preproc; ++i){
00273 ar & preprocessed[i];
00274 }
00275
00276 }
00277
00278 SG_DEBUG("done archiving Features\n");
00279
00280 }
00281
00282 GLOBAL_BOOST_SERIALIZATION_SPLIT_MEMBER();
00283
00284
00285 #endif //HAVE_BOOST_SERIALIZATION
00286
00287 private:
00289 uint64_t properties;
00290
00292 int32_t cache_size;
00293
00295 CPreProc** preproc;
00296
00298 int32_t num_preproc;
00299
00301 bool* preprocessed;
00302 };
00303 }
00304 #endif