diff options
Diffstat (limited to 'src/lua/common')
-rw-r--r-- | src/lua/common/je_lua.h | 14 | ||||
-rw-r--r-- | src/lua/common/je_lua_object.cpp | 48 | ||||
-rw-r--r-- | src/lua/common/je_lua_object.h | 28 | ||||
-rw-r--r-- | src/lua/common/je_lua_runtime.cpp | 20 | ||||
-rw-r--r-- | src/lua/common/je_lua_shared.cpp | 25 | ||||
-rw-r--r-- | src/lua/common/je_lua_shared.hpp | 80 |
6 files changed, 94 insertions, 121 deletions
diff --git a/src/lua/common/je_lua.h b/src/lua/common/je_lua.h index b390e4c..cacec95 100644 --- a/src/lua/common/je_lua.h +++ b/src/lua/common/je_lua.h @@ -20,7 +20,7 @@ namespace JinEngine /// /// /// - LuaObject* luax_newinstance(lua_State* L, const char* type, SharedBase* shared); + LuaObject* luax_newinstance(lua_State* L, const char* type, Shared* shared); /// /// Copy instance to another lua state. @@ -35,32 +35,32 @@ namespace JinEngine /// /// Access lua object by object pointer. /// - int luax_getobject(lua_State* L, SharedBase* shared); + int luax_getobject(lua_State* L, Shared* shared); /// /// Get object's reference table. /// - void luax_getreference(lua_State* L, SharedBase* shared); + void luax_getreference(lua_State* L, Shared* shared); /// /// /// - bool luax_addreference(lua_State* L, SharedBase* shared, SharedBase* dep); + bool luax_addreference(lua_State* L, Shared* shared, Shared* dep); /// /// /// - void luax_removereference(lua_State* L, SharedBase* shared); + void luax_removereference(lua_State* L, Shared* shared); /// /// /// - void luax_removereference(lua_State* L, SharedBase* shared, SharedBase* dep); + void luax_removereference(lua_State* L, Shared* shared, Shared* dep); /// /// /// - void luax_removeobject(lua_State* L, SharedBase* shared); + void luax_removeobject(lua_State* L, Shared* shared); /// /// diff --git a/src/lua/common/je_lua_object.cpp b/src/lua/common/je_lua_object.cpp index de3270a..9aabeb5 100644 --- a/src/lua/common/je_lua_object.cpp +++ b/src/lua/common/je_lua_object.cpp @@ -6,48 +6,48 @@ namespace JinEngine namespace Lua { - void LuaObject::bind(SharedBase* obj) + void LuaObject::bind(Shared* obj) { if (obj) { - object = obj; - object->retain(); - dependencies = new std::map<uint, SharedBase*>(); + shared = obj; + shared->retain(); + dependencies = new std::map<uint, Shared*>(); } } void LuaObject::release() { - // Delete lua object table reference and references. + // Delete lua shared table reference and references. if (dependencies) { clearDependencies(); delete dependencies; dependencies = nullptr; } - // Try delete engine side object. - if (object) + // Try delete engine side shared. + if (shared) { - object->release(); - object = nullptr; + shared->release(); + shared = nullptr; } } const char* LuaObject::getObjectType() { - return object->getType(); + return shared->getType(); } - SharedBase* LuaObject::getShared() + Shared* LuaObject::getShared() { - return object; + return shared; } - void LuaObject::setDependency(uint key, SharedBase* dep) + void LuaObject::setDependency(uint key, Shared* dep) { removeDependency(key); - dependencies->insert(std::pair<uint, SharedBase*>(key, dep)); - luax_addreference(state, object, dep); + dependencies->insert(std::pair<uint, Shared*>(key, dep)); + luax_addreference(state, shared, dep); } void LuaObject::removeDependency(uint key) @@ -55,19 +55,19 @@ namespace JinEngine if (!isDependOn(key)) return; DepsMap::iterator it = dependencies->find(key); - SharedBase* dep = it->second; - luax_removereference(state, object, dep); + Shared* dep = it->second; + luax_removereference(state, shared, dep); dependencies->erase(it); } - void LuaObject::removeDependency(SharedBase* dependency) + void LuaObject::removeDependency(Shared* dependency) { for (DepsMap::iterator it = dependencies->begin(); it != dependencies->end();) { - SharedBase* dep = it->second; + Shared* dep = it->second; if (dep == dependency) { - luax_removereference(state, object, dep); + luax_removereference(state, shared, dep); dependencies->erase(it); } else @@ -80,9 +80,9 @@ namespace JinEngine return dependencies->find(key) != dependencies->end(); } - bool LuaObject::isDependOn(SharedBase* shared) + bool LuaObject::isDependOn(Shared* shared) { - for (std::pair<uint, SharedBase*> dep : (*dependencies)) + for (std::pair<uint, Shared*> dep : (*dependencies)) { if (dep.second == shared) return true; @@ -92,11 +92,11 @@ namespace JinEngine void LuaObject::clearDependencies() { - luax_removereference(state, object); + luax_removereference(state, shared); dependencies->clear(); } - SharedBase* LuaObject::getDependency(uint key) + Shared* LuaObject::getDependency(uint key) { if (!isDependOn(key)) return nullptr; diff --git a/src/lua/common/je_lua_object.h b/src/lua/common/je_lua_object.h index 296ee03..a81f57c 100644 --- a/src/lua/common/je_lua_object.h +++ b/src/lua/common/je_lua_object.h @@ -17,43 +17,33 @@ namespace JinEngine /// /// Set lua_State and object it bind. /// - void bind(SharedBase* obj); + void bind(Shared* obj); void release(); const char* getObjectType(); - SharedBase* getShared(); + Shared* getShared(); template<class T> - Shared<T>& getShared() - { - return *(Shared<T>*)object; - } - - /// - /// For convenience. - /// - template<class T> T* getObject() { - Shared<T>& shared = getShared<T>(); - return shared.getObject(); + return shared->getObject<T>(); } - void setDependency(uint key, SharedBase* shared); + void setDependency(uint key, Shared* shared); void removeDependency(uint key); - void removeDependency(SharedBase* dep); + void removeDependency(Shared* dep); bool isDependOn(uint key); - bool isDependOn(SharedBase* shared); + bool isDependOn(Shared* shared); void clearDependencies(); - SharedBase* getDependency(uint key); + Shared* getDependency(uint key); int getDependenciesCount(); @@ -61,11 +51,11 @@ namespace JinEngine // Lua state object. ////////////////////////////////////////////////////////////////////////////////////////////////////// - using DepsMap = std::map<uint, SharedBase*>; + using DepsMap = std::map<uint, Shared*>; lua_State* state; - SharedBase* object; + Shared* shared; DepsMap* dependencies; diff --git a/src/lua/common/je_lua_runtime.cpp b/src/lua/common/je_lua_runtime.cpp index 055073d..0110d22 100644 --- a/src/lua/common/je_lua_runtime.cpp +++ b/src/lua/common/je_lua_runtime.cpp @@ -19,7 +19,7 @@ namespace JinEngine using DepsMap = LuaObject::DepsMap; - LuaObject* luax_newinstance(lua_State* L, const char* type, SharedBase* shared) + LuaObject* luax_newinstance(lua_State* L, const char* type, Shared* shared) { LuaObject* obj = static_cast<LuaObject*>(luax_newinstance(L, type, sizeof(LuaObject))); obj->state = L; @@ -46,7 +46,7 @@ namespace JinEngine DepsMap& srcDeps = *src->dependencies; for (DepsMap::iterator it = srcDeps.begin(); it != srcDeps.end(); ++it) { - SharedBase* shr = it->second; + Shared* shr = it->second; // Try get lua object. luax_getobject(src->state, shr); LuaObject* luaObj = (LuaObject*)luax_checktype(src->state, -1, shr->getType()); @@ -54,7 +54,7 @@ namespace JinEngine luax_copyinstance(to, luaObj); luax_pop(to, 1); // Pop reference object. } - SharedBase * shr = src->getShared(); + Shared * shr = src->getShared(); LuaObject* obj = luax_newinstance(to, src->getObjectType(), shr); (*obj->dependencies) = (*src->dependencies); // Add to objects_table. @@ -68,13 +68,13 @@ namespace JinEngine DepsMap::iterator it = deps.begin(); for (; it != deps.end(); ++it) { - SharedBase* dep = it->second; + Shared* dep = it->second; luax_addreference(to, shr, dep); } return obj; } - int luax_getobject(lua_State* L, SharedBase* shared) + int luax_getobject(lua_State* L, Shared* shared) { luax_getobjectstable(L); luax_pushlightuserdata(L, shared); @@ -83,7 +83,7 @@ namespace JinEngine return 1; } - void luax_removeobject(lua_State* L, SharedBase* shared) + void luax_removeobject(lua_State* L, Shared* shared) { luax_getobjectstable(L); luax_pushlightuserdata(L, shared); @@ -152,7 +152,7 @@ namespace JinEngine return 1; } - void luax_getreference(lua_State* L, SharedBase* shared) + void luax_getreference(lua_State* L, Shared* shared) { luax_getreferencestable(L); luax_pushlightuserdata(L, shared); @@ -160,7 +160,7 @@ namespace JinEngine luax_remove(L, -2); } - bool luax_addreference(lua_State* L, SharedBase* shared, SharedBase* dep) + bool luax_addreference(lua_State* L, Shared* shared, Shared* dep) { luax_getreference(L, shared); // If no dependencies table, add one. @@ -186,7 +186,7 @@ namespace JinEngine return true; } - void luax_removereference(lua_State* L, SharedBase* shared) + void luax_removereference(lua_State* L, Shared* shared) { luax_getreferencestable(L); luax_pushlightuserdata(L, shared); @@ -195,7 +195,7 @@ namespace JinEngine luax_pop(L, 1); } - void luax_removereference(lua_State* L, SharedBase* shared, SharedBase* dep) + void luax_removereference(lua_State* L, Shared* shared, Shared* dep) { luax_getreference(L, shared); if (luax_isnil(L, -1)) diff --git a/src/lua/common/je_lua_shared.cpp b/src/lua/common/je_lua_shared.cpp index eecf632..62dfab9 100644 --- a/src/lua/common/je_lua_shared.cpp +++ b/src/lua/common/je_lua_shared.cpp @@ -7,23 +7,12 @@ namespace JinEngine namespace Lua { - SharedBase::SharedBase(void* obj, const char* t) - : mCount(0) - , mObject(obj) - , mType(t) - { - } - - SharedBase::~SharedBase() - { - } - - void SharedBase::retain() + void Shared::retain() { ++mCount; } - void SharedBase::release() + void Shared::release() { if (--mCount <= 0) { @@ -31,15 +20,5 @@ namespace JinEngine } } - bool SharedBase::isType(const char* t) - { - return strcmp(mType, t) == 0; - } - - const char* SharedBase::getType() - { - return mType; - } - } }
\ No newline at end of file diff --git a/src/lua/common/je_lua_shared.hpp b/src/lua/common/je_lua_shared.hpp index 86ee9be..16dd943 100644 --- a/src/lua/common/je_lua_shared.hpp +++ b/src/lua/common/je_lua_shared.hpp @@ -5,6 +5,8 @@ #include <vector> #include <functional> +#include "libjin/jin.h" + namespace JinEngine { namespace Lua @@ -15,68 +17,70 @@ namespace JinEngine /// /// ̰߳ȫĹģ塣 /// - class SharedBase + class Shared { public: - bool isType(const char* t); - - const char* getType(); - - protected: - friend class LuaObject; - - SharedBase(void* obj, const char* t); - - SharedBase(const SharedBase&); - - /// - /// ͬһ̵߳lua_StateУLuaObjectEngineObjectӦһһӦLuaObject(lua runtime)ü - /// ͻաEngine-sideüΪά̵ͬ߳lua_StateͬһEngineObjectÿLuaObjectһ - /// Sharedʱһüͬһ߳УһEngineObjectֻһLuaObjectnew - /// instanceУômCountͱEngineObjectĹ߳ - /// - void retain(); - - void release(); - - virtual ~SharedBase(); + Shared(Object* obj, const char* type) + : mCount(0) + , mObject(obj) + , mType(type) + { + } - void* mObject; - int mCount; - const char* mType; + Object* operator->() + { + return static_cast<Object*>(mObject); + } - }; + Object* getObject() + { + return static_cast<Object*>(mObject); + } - template<class T> - class Shared : public SharedBase - { - public: - Shared(T* obj, const char* type) - : SharedBase(obj, type) + inline const char* getType() { + return mType; } - T* operator->() + inline bool isType(const char* t) { - return static_cast<T*>(mObject); + return strcmp(mType, t) == 0; } + template<class T> T* getObject() { return static_cast<T*>(mObject); } private: - Shared(const Shared<T>& shared); + friend class LuaObject; + + Shared(const Shared& shared); + /// + /// Sharedֻڶ + /// ~Shared() { - T* obj = static_cast<T*>(mObject); + Object* obj = static_cast<Object*>(mObject); delete obj; } - }; + /// + /// ͬһ̵߳lua_StateУLuaObjectEngineObjectӦһһӦLuaObject(lua runtime)ü + /// ͻաEngine-sideüΪά̵ͬ߳lua_StateͬһEngineObjectÿLuaObjectһ + /// Sharedʱһüͬһ߳УһEngineObjectֻһLuaObjectnew + /// instanceУômCountͱEngineObjectĹ߳ + /// + void retain(); + void release(); + Object* mObject; + int mCount; + const char* mType; + }; + } // namespace Lua } // namespace JinEngine |