EnumClass.h

00001 /* 
00002    EyeDB Object Database Management System
00003    Copyright (C) 1994-2008 SYSRA
00004    
00005    EyeDB is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009    
00010    EyeDB is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014    
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with this library; if not, write to the Free Software
00017    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA 
00018 */
00019 
00020 /*
00021    Author: Eric Viara <viara@sysra.com>
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     // EnumItem Interface
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     // EnumItem Private Part
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     // EnumClass Interface
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     //Bool compare_perform(const Class *cl) const;
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     // EnumClass Private Part
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     // EnumClass Restricted Access (conceptually private)
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

Generated on Mon Dec 22 18:15:54 2008 for eyedb by  doxygen 1.5.3