00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _EYEDB_ENUM_H
00026 #define _EYEDB_ENUM_H
00027
00028 namespace eyedb {
00029
00038 class Enum : public Instance {
00039
00040
00041
00042
00043 public:
00049 Enum(Database *db = 0, const Dataspace *dataspace = 0);
00050
00055 Enum(const Enum &o);
00056
00062 Enum& operator=(const Enum &o);
00063
00068 virtual Object *clone() const {return new Enum(*this);}
00069
00075 Status setValue(Data data);
00076
00082 Status getValue(Data *data) const;
00083
00089 Status setValue(unsigned int v);
00090
00096 Status getValue(unsigned int *v) const;
00097
00103 Status setValue(const char *name);
00104
00110 Status getValue(const char **s) const;
00111
00117 Status setValue(const EnumItem *it);
00118
00124 Status getValue(const EnumItem **pit) const;
00125
00126 Status create();
00127 Status update();
00128 Status remove(const RecMode* = RecMode::NoRecurs);
00129
00137 Status trace(FILE *fd = stdout, unsigned int flags = 0, const RecMode *recmode = RecMode::FullRecurs) const;
00138
00143 virtual Enum *asEnum() {return this;}
00144
00149 virtual const Enum *asEnum() const {return this;}
00150
00151 virtual ~Enum();
00152
00153
00154
00155
00156 private:
00157 const EnumItem *val;
00158 Status trace_realize(FILE*, int, unsigned int, const RecMode *) const;
00159 virtual void garbage();
00160 };
00161
00162 class EnumPtr : public InstancePtr {
00163
00164 public:
00165 EnumPtr(Enum *o = 0) : InstancePtr(o) { }
00166
00167 Enum *getEnum() {return dynamic_cast<Enum *>(o);}
00168 const Enum *getEnum() const {return dynamic_cast<Enum *>(o);}
00169
00170 Enum *operator->() {return dynamic_cast<Enum *>(o);}
00171 const Enum *operator->() const {return dynamic_cast<Enum *>(o);}
00172 };
00173
00174 typedef std::vector<EnumPtr> EnumPtrVector;
00175
00180 }
00181
00182 #endif