Main Page   Class Hierarchy   Compound List   File List   Compound Members  

field.h

00001 #ifndef __FIELD_H__
00002 #define __FIELD_H__
00003 
00004 #include <string.h>
00005 
00009 enum RTTIFieldFlags { 
00010     RTTI_FLD_INSTANCE  = 0x0001, 
00011     RTTI_FLD_STATIC    = 0x0002, 
00012     RTTI_FLD_CONST     = 0x0004, 
00013     RTTI_FLD_PUBLIC    = 0x0010, 
00014     RTTI_FLD_PROTECTED = 0x0020, 
00015     RTTI_FLD_PRIVATE   = 0x0040, 
00016     RTTI_FLD_VIRTUAL   = 0x0100, // used for virtual base classes
00017     RTTI_FLD_VOLATILE  = 0x0200, 
00018     RTTI_FLD_TRANSIENT = 0x0400
00019 }; 
00020 
00021 
00025 class RTTIFieldDescriptor { 
00026   public:
00031     char const* getName() { 
00032         return name;
00033     }
00034 
00042     void setValue(void* obj, void* buf) { 
00043         memcpy((char*)obj + offs, buf, size);
00044     }
00045 
00053     void getValue(void* obj, void* buf) { 
00054         memcpy(buf, (char*)obj + offs, size);
00055     }
00056 
00061     RTTIClassDescriptor* getDelcaringClass() { 
00062         return declaringClass;
00063     }
00064     
00069     int getOffset() { 
00070         return offs;
00071     }
00072         
00077     int getSize() { 
00078         return size;
00079     }
00080         
00085     RTTIType* getType() { 
00086         return type;
00087     }
00088 
00093     int getFlags() { 
00094         return flags;
00095     }
00096 
00097 
00106     RTTIFieldDescriptor(char const* name, int offs, int size, int flags, RTTIType* type) { 
00107         this->name = name;
00108         this->offs = offs;
00109         this->size = size;
00110         this->type = type;
00111         this->flags = flags;
00112         next = NULL; 
00113         chain = &next;
00114     }
00115 
00122     RTTIFieldDescriptor& operator, (RTTIFieldDescriptor& field) {
00123         *chain = &field;
00124         chain = &field.next;
00125         return *this;
00126     }
00127 
00132     int getIndex() { 
00133         return index;
00134     }
00135     
00139     ~RTTIFieldDescriptor() { 
00140         type->destroy();
00141     }
00142   protected:
00143     friend class RTTIType;
00144     friend class RTTIClassDescriptor;
00145     friend class RTTIBfdRepository;
00146 
00147     int         flags;
00148     int         index;
00149     RTTIType*   type;
00150     int         offs;
00151     int         size;
00152     char const* name;
00153 
00154     RTTIClassDescriptor*  declaringClass;
00155 
00156     RTTIFieldDescriptor*  next;
00157     RTTIFieldDescriptor** chain;
00158 };
00159 
00160 #endif

Generated on Fri Apr 26 17:39:24 2002 for CppReflection by doxygen1.2.15