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_CLASS_H
00026 #define _EYEDB_ENUM_CLASS_H
00027
00028 namespace eyedb {
00029
00038 class EnumItem {
00039
00040
00041
00042
00043 public:
00050 EnumItem(const char *nm, unsigned int val, int num = -1);
00051
00059 EnumItem(const char *nm, const char *aliasname, unsigned int val = 0, int num = -1);
00060
00065 unsigned int getValue() const {return value;}
00066
00071 const char *getName() const {return name;}
00072
00077 const char *getAliasName() const {return aliasname ? aliasname : name;}
00078
00084 Bool compare(const EnumItem *item) const;
00085
00090 EnumItem *clone() const;
00091
00092 ~EnumItem();
00093
00094
00095
00096
00097 private:
00098 friend class EnumClass;
00099 friend class Enum;
00100 char *name;
00101 char *aliasname;
00102 unsigned int value;
00103 int num;
00104 EnumItem(const EnumItem *, int);
00105 };
00106
00107 class EnumClass : public Class {
00108
00109
00110
00111
00112 public:
00117 EnumClass(const char *s);
00118
00124 EnumClass(Database *db, const char *s);
00125
00130 EnumClass(const EnumClass &cl);
00131
00137 EnumClass& operator=(const EnumClass &cl);
00138
00143 virtual Object *clone() const {return new EnumClass(*this);}
00144
00149 int getEnumItemsCount() const;
00150
00156 const EnumItem *getEnumItem(int n) const;
00157
00163 const EnumItem *getEnumItemFromName(const char *nm) const;
00164
00170 const EnumItem *getEnumItemFromVal(unsigned int val) const;
00171
00178 Status setEnumItems(EnumItem **nitems, int cnt);
00179
00185 const EnumItem **getEnumItems(int &cnt) const;
00186
00192 Object *newObj(Database *db = NULL) const;
00193
00200 Object *newObj(Data data, Bool copy = True) const;
00201
00207 Status setName(const char *s);
00208
00212 void touch();
00213
00218 virtual EnumClass *asEnumClass() {return this;}
00219
00224 virtual const EnumClass *asEnumClass() const {return this;}
00225
00226 void _setCSDRSize(Size, Size);
00227
00233 Bool compare_perform(const Class *cl,
00234 Bool compClassOwner,
00235 Bool compNum,
00236 Bool compName,
00237 Bool inDepth) const;
00238
00239
00247 Status trace(FILE *fd = stdout, unsigned int flags = 0, const RecMode *recmode = RecMode::FullRecurs) const;
00248
00249 Status setValue(Data);
00250 Status getValue(Data*) const;
00251
00256 Status create();
00257
00258 Status update();
00259
00260 Status remove(const RecMode* = RecMode::NoRecurs);
00261
00262 Status generateCode_C(Schema *, const char *prefix,
00263 const GenCodeHints &,
00264 const char *stubs,
00265 FILE *, FILE *, FILE *, FILE *, FILE *, FILE *);
00266 Status generateCode_Java(Schema *, const char *prefix,
00267 const GenCodeHints &, FILE *);
00268 Status traceData(FILE *, int, Data, Data, TypeModifier * = NULL) const;
00269 Status setRawData(Data, Data, int, Bool &, Bool);
00270 Status getRawData(Data, Data, int) const;
00271
00272 virtual ~EnumClass();
00273
00274
00275
00276
00277 private:
00278 int items_cnt;
00279 EnumItem ** items;
00280
00281 void free_items();
00282
00283 Status generateClassDesc_C(GenContext *);
00284
00285 Status generateClassDesc_Java(GenContext *);
00286
00287 friend Status
00288 enumClassMake(Database *, const Oid *, Object **,
00289 const RecMode *, const ObjectHeader *, Data,
00290 LockMode, const Class *);
00291
00292 Status trace_realize(FILE*, int, unsigned int, const RecMode *) const;
00293
00294 int genODL(FILE *fd, Schema *) const;
00295
00296 virtual void garbage();
00297 void copy_realize(const EnumClass &cl);
00298
00299
00300
00301
00302 public:
00303 EnumClass(const Oid&, const char *);
00304 virtual Status loadComplete(const Class *);
00305 };
00306
00307 class EnumClassPtr : public ClassPtr {
00308
00309 public:
00310 EnumClassPtr(EnumClass *o = 0) : ClassPtr(o) { }
00311
00312 EnumClass *getEnumClass() {return dynamic_cast<EnumClass *>(o);}
00313 const EnumClass *getEnumClass() const {return dynamic_cast<EnumClass *>(o);}
00314
00315 EnumClass *operator->() {return dynamic_cast<EnumClass *>(o);}
00316 const EnumClass *operator->() const {return dynamic_cast<EnumClass *>(o);}
00317 };
00318
00319 typedef std::vector<EnumClassPtr> EnumClassPtrVector;
00320
00325 }
00326
00327 #endif