00001
00027 #ifndef _ABSTRACTSTRING_H
00028 #define _ABSTRACTSTRING_H
00029
00030 #include "Feature.h"
00031
00033 typedef map<string, unsigned long> stringcode;
00034
00043 class AbstractStringFeature: public PersistantFeature
00044 {
00045 public:
00047 typedef enum ComparatorType { None, Levenshtein };
00048
00049 protected:
00065 AbstractStringFeature(ComparatorType comp, stringcode *code, long *maxlen);
00066
00082 AbstractStringFeature(ComparatorType comp, stringcode *code, long *maxlen, const string &name);
00083
00084 public:
00085 virtual ~AbstractStringFeature();
00086
00087 virtual double getPosition() const;
00088 virtual double getDistance(Feature *f) const;
00089 virtual void moveTowards(Feature *f, double factor);
00090
00091 virtual string serialize() const;
00092 virtual void unserialize(string value);
00093
00094 virtual featureparams write() const;
00095 virtual void read(featureparams *param);
00096
00097 virtual Feature* clone() const;
00098 virtual void aggregate(aggregatelist samples);
00099
00100 virtual FeatureType getType() const { return nominal; }
00101 virtual const string getName() const { return "AbstractStringFeature"; }
00102
00108 const string& getVal() const { return name; }
00109
00111 const unsigned long getCodeVal() const { return codeval; }
00112
00114 const stringcode* getCode() { return code; }
00115
00116 #if _DEBUG_FEATURES
00117
00123 virtual string toString() const;
00124 #endif
00125
00126 private:
00128 string name;
00129
00130 protected:
00132 long *maxlength;
00134 stringcode *code;
00136 char *position;
00137
00144 unsigned long codeval;
00145
00155 unsigned long getCodeForName(const string &name);
00156
00157 private:
00159 ComparatorType comparator;
00160 };
00161
00167 class AbstractStringListFeature: public AbstractStringFeature
00168 {
00169 private:
00171 stringvector names;
00172
00173 protected:
00180 bit_vector listval;
00181
00196 AbstractStringListFeature(stringcode *code, long *maxlen);
00197
00212 AbstractStringListFeature(stringcode *code, long *maxlen, const stringvector *names);
00213
00225 bit_vector getCodeForList(const stringvector *names);
00226
00227 public:
00228 virtual string serialize() const;
00229 virtual void unserialize(string value);
00230
00231 virtual double getPosition() const;
00232 virtual double getDistance(Feature *f) const;
00233 virtual void moveTowards(Feature *f, double factor);
00234
00235 virtual Feature* clone() const;
00236
00237 virtual const string getName() const { return "AbstractStringListFeature"; }
00238
00244 const bit_vector& getListVal() const {
00245 return listval;
00246 }
00247
00253 const stringvector& getListValues() const {
00254 return names;
00255 }
00256
00257 #if _DEBUG_FEATURES
00258 virtual string toString() const;
00259 #endif
00260 };
00261
00262 #endif // _ABSTRACTSTRING_H