00001 #ifndef __REFLECT_H__ 00002 #define __REFLECT_H__ 00003 00004 #ifdef USE_RTTI 00005 #include <typeinfo> 00006 #endif 00007 00008 #ifdef RTTI_DLL 00009 #ifdef INSIDE_RTTI 00010 #define RTTI_DLL_ENTRY __declspec(dllexport) 00011 #else 00012 #define RTTI_DLL_ENTRY __declspec(dllimport) 00013 #endif 00014 #else 00015 #define RTTI_DLL_ENTRY 00016 #endif 00017 00018 00019 #include "type.h" 00020 #include "class.h" 00021 #include "field.h" 00022 #include "method.h" 00023 00024 const int RTTI_CLASS_HASH_SIZE = 1013; 00025 00029 class RTTI_DLL_ENTRY RTTIRepository { 00030 public: 00037 RTTIClassDescriptor* getFirstClass() { 00038 return classes; 00039 } 00040 00046 RTTIClassDescriptor* findClass(char const* name); 00047 00048 #ifdef USE_RTTI 00049 00054 * 00055 RTTIClassDescriptor* findClass(class type_info const& tinfo) { 00056 return findClass(tinfo.getName()); 00057 } 00058 #endif 00059 00064 static RTTIRepository* getInstance() { 00065 return &theRepository; 00066 } 00067 00072 bool addClass(RTTIClassDescriptor* cls); 00073 00083 virtual bool load(char const* filePath); 00084 00085 protected: 00086 static RTTIRepository theRepository; 00087 RTTIClassDescriptor* classes; 00088 RTTIClassDescriptor* hashTable[RTTI_CLASS_HASH_SIZE]; 00089 }; 00090 00091 00092 #endif 00093 00094