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.cpp | 94 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/lua/common/je_lua_shared.cpp (limited to 'src/lua/common/je_lua_shared.cpp') diff --git a/src/lua/common/je_lua_shared.cpp b/src/lua/common/je_lua_shared.cpp new file mode 100644 index 0000000..a3478dd --- /dev/null +++ b/src/lua/common/je_lua_shared.cpp @@ -0,0 +1,94 @@ +#include "je_lua.h" +#include "je_lua_shared.hpp" + +namespace JinEngine +{ + namespace Lua + { + + void SharedBase::retain() + { + ++mCount; + } + + void SharedBase::release() + { + if (--mCount <= 0) + { + luax_removeobject(mL, this); + delete this; + } + } + + void SharedBase::setDependency(int key, SharedBase* shared) + { + removeDependency(key); + shared->retain(); + mDependencies.insert(std::pair(key, shared)); + } + + void SharedBase::removeDependency(int key) + { + if (!isDependOn(key)) + return; + std::map::iterator it = mDependencies.find(key); + it->second->release(); + mDependencies.erase(it); + } + + void SharedBase::removeDependency(SharedBase* dep) + { + for (std::map::iterator it = mDependencies.begin(); it != mDependencies.end();) + { + if (it->second == dep) + { + it->second->release(); + mDependencies.erase(it); + } + else + ++it; + } + } + + bool SharedBase::isDependOn(int key) + { + return mDependencies.find(key) != mDependencies.end(); + } + + bool SharedBase::isDependOn(SharedBase* shared) + { + for (std::pair dep : mDependencies) + { + if (dep.second == shared) + return true; + } + return false; + } + + void SharedBase::clearDependencies() + { + for (std::pair dep : mDependencies) + dep.second->release(); + mDependencies.clear(); + } + + SharedBase* SharedBase::getDependency(int key) + { + if (!isDependOn(key)) + return nullptr; + return mDependencies.find(key)->second; + } + + bool SharedBase::isType(const char* t) + { + return strcmp(type, t) == 0; + } + + int SharedBase::getDependencyCount() + { + return mDependencies.size(); + } + + + } +} \ No newline at end of file -- cgit v1.1-26-g67d0