00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef neo_script_lua_classregistry_h
00022 #define neo_script_lua_classregistry_h
00023
00029 #include "../../core/platform.h"
00030
00031 #if NEO_ENABLE_SCRIPT_LUA
00032
00033 #include "../../core/hashtable.h"
00034 #include "../../core/type.h"
00035 #include "reference.h"
00036
00037 extern "C" {
00038
00039 #include "lua/lua.h"
00040
00041 }
00042
00043 namespace neo {
00044 namespace script {
00045 namespace lua {
00046
00047 class ClassRep;
00048
00049 class ClassRegistry
00050 {
00051 public:
00052
00054
00055 ClassRegistry( lua_State* p_state );
00056
00058 ~ClassRegistry();
00059
00061
00064 static inline ClassRegistry* get( lua_State* p_state );
00065
00067
00069 inline void pushCppInstanceMT( lua_State* p_state ) const;
00070
00072
00074 inline void pushCppClassMT( lua_State* p_state ) const;
00075
00077
00079 void addClass( ClassRep* p_crep );
00080
00082
00085 inline ClassRep* getClass( const std::type_info* p_type );
00086
00087 private:
00088
00089 #if !NEO_ENABLE_THREAD_SAFE
00091 static lua_State* _p_key;
00092
00094 static ClassRegistry* _p_cache;
00095 #endif
00096
00098 core::HashTable< const std::type_info*, ClassRep* > _classes;
00099
00101 int _refCppInstance;
00102
00104 int _refCppClass;
00105 };
00106
00107 #include "classregistry.inl"
00108
00109 }
00110 }
00111 }
00112
00113 #endif
00114
00115 #endif