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