00001 #ifndef __CLASS_H__ 00002 #define __CLASS_H__ 00003 00004 #include <stddef.h> 00005 #include <stdio.h> 00006 00007 #include "type.h" 00008 00009 00013 enum RTTIClassFlags { 00014 RTTI_CLS_ABSTRACT = 0x0001, 00015 RTTI_CLS_INTERNAL = 0x0002, 00016 RTTI_CLS_TRANSIENT = 0x0004 00017 }; 00018 00019 00023 class RTTI_DLL_ENTRY RTTIClassDescriptor : public RTTIType { 00024 public: 00025 typedef RTTIFieldDescriptor* (*RTTIDescribeFieldsFunc)(); 00026 typedef RTTIMethodDescriptor* (*RTTIDescribeMethodsFunc)(); 00027 typedef void (*RTTIDefaultConstructor)(void* ptr); 00028 typedef void* (*RTTICreateInstanceFunc)(); 00029 00034 void getTypeName(char* buf); 00035 00042 RTTIClassDescriptor* getNext() { 00043 return next; 00044 } 00045 00050 RTTIFieldDescriptor** getFields() { 00051 return fields; 00052 } 00053 00058 int getNumberOfFields() { 00059 return nFields; 00060 } 00061 00066 char const* getName() { 00067 return name; 00068 } 00069 00074 int getSize() { 00075 return size; 00076 } 00077 00082 int getFlags() { 00083 return flags; 00084 } 00085 00090 void* newInstance(); 00091 00096 RTTIClassDescriptor** getBaseClasses() { 00097 return baseClasses; 00098 } 00099 00104 int getNumberOfBaseClasses() { 00105 return nBaseClasses; 00106 } 00107 00112 RTTIMethodDescriptor** getMethods() { 00113 return methods; 00114 } 00115 00120 int getNumberOfMethods() { 00121 return nMethods; 00122 } 00123 00129 RTTIFieldDescriptor* findField(char const* name); 00130 00158 RTTIMethodDescriptor* findMethod(char const* name); 00159 00160 00173 RTTIClassDescriptor(char const* name, int size, 00174 RTTIDescribeFieldsFunc describeFieldsFunc, 00175 RTTIDescribeMethodsFunc describeMethodsFunc, 00176 RTTICreateInstanceFunc createInstanceFunc, 00177 int flags); 00178 00185 RTTIClassDescriptor(char const* name, int size, int flags); 00186 00190 ~RTTIClassDescriptor(); 00191 00192 protected: 00193 friend class RTTIRepository; 00194 friend class RTTIBfdRepository; 00195 00196 RTTIClassDescriptor* next; 00197 RTTIClassDescriptor* collisionChain; 00198 00199 RTTIMethodDescriptor* methodList; 00200 RTTIMethodDescriptor** methods; 00201 int nMethods; 00202 00203 RTTIFieldDescriptor* fieldList; 00204 RTTIFieldDescriptor** fields; 00205 int nFields; 00206 00207 int flags; 00208 int size; 00209 00210 bool initialized; 00211 00212 char const* name; 00213 unsigned hashCode; 00214 00215 int nBaseClasses; 00216 RTTIClassDescriptor** baseClasses; 00217 00218 RTTIDefaultConstructor defaultConstructor; 00219 RTTICreateInstanceFunc createInstanceFunc; 00220 00221 void buildClassDescriptor(); 00222 }; 00223 00224 00225 #endif