From 8d4e45c9a85175d0fc37d7d5c49ff90abb01fe4f Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 23 Nov 2018 12:24:22 +0800 Subject: =?UTF-8?q?*=E4=BF=AE=E6=94=B9lua=20bind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lua/common/je_lua_shared.hpp | 98 ++++++++-------------------------------- 1 file changed, 20 insertions(+), 78 deletions(-) (limited to 'src/lua/common/je_lua_shared.hpp') diff --git a/src/lua/common/je_lua_shared.hpp b/src/lua/common/je_lua_shared.hpp index 59e945d..2f1e18b 100644 --- a/src/lua/common/je_lua_shared.hpp +++ b/src/lua/common/je_lua_shared.hpp @@ -5,6 +5,9 @@ #include #include +#include + +struct lua_State; namespace JinEngine { @@ -14,96 +17,37 @@ namespace JinEngine class SharedBase { public: - void retain() - { - ++mCount; - } + void retain(); - void release() - { - if (--mCount <= 0) - delete this; - } + void release(); // Object type. const char* const type; - void setDependency(int key, SharedBase* shared) - { - removeDependency(key); - shared->retain(); - mDependencies.insert(std::pair(key, shared)); - } + void setDependency(int key, SharedBase* shared); - void removeDependency(int key) - { - if (!isDependOn(key)) - return; - DepMap::iterator it = mDependencies.find(key); - it->second->release(); - mDependencies.erase(it); - } + void removeDependency(int key); - void removeDependency(SharedBase* dep) - { - for (DepMap::iterator it = mDependencies.begin(); it != mDependencies.end();) - { - if (it->second == dep) - { - it->second->release(); - mDependencies.erase(it); - } - else - ++it; - } - } + void removeDependency(SharedBase* dep); - bool isDependOn(int key) - { - return mDependencies.find(key) != mDependencies.end(); - } + bool isDependOn(int key); - bool isDependOn(SharedBase* shared) - { - for (std::pair dep : mDependencies) - { - if (dep.second == shared) - return true; - } - return false; - } + bool isDependOn(SharedBase* shared); - void clearDependencies() - { - for (std::pair dep : mDependencies) - dep.second->release(); - mDependencies.clear(); - } + void clearDependencies(); - SharedBase* getDependency(int key) - { - if (!isDependOn(key)) - return nullptr; - return mDependencies.find(key)->second; - } + SharedBase* getDependency(int key); - bool isType(const char* t) - { - return strcmp(type, t) == 0; - } + bool isType(const char* t); - int getDependencyCount() - { - return mDependencies.size(); - } + int getDependencyCount(); protected: - using DepMap = std::map; - - SharedBase(void* obj, const char* t) + SharedBase(lua_State* L, void* obj, const char* t) : mCount(0) , mObject(obj) + , mL(L) , type(t) { } @@ -117,15 +61,16 @@ namespace JinEngine void* mObject; int mCount; - DepMap mDependencies; + lua_State* mL; + std::map mDependencies; }; template class Shared : public SharedBase { public: - Shared(T* obj, const char* type) - : SharedBase(obj, type) + Shared(lua_State* L, T* obj, const char* type) + : SharedBase(L, obj, type) { } @@ -146,9 +91,6 @@ namespace JinEngine // Make shared only be able created with new. ~Shared() { - // Delete object mapping. - luax_removeobject(LuaState::get(), this); - // T* obj = static_cast(mObject); delete obj; } -- cgit v1.1-26-g67d0