aboutsummaryrefslogtreecommitdiff
path: root/src/lua/common/je_lua_shared.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-11-23 12:24:22 +0800
committerchai <chaifix@163.com>2018-11-23 12:24:22 +0800
commit8d4e45c9a85175d0fc37d7d5c49ff90abb01fe4f (patch)
tree4ca2d0b34366293ad57d77c64e753c9013ccdc21 /src/lua/common/je_lua_shared.cpp
parentcfa05003be67344fbc79c338c2ac82f0accd979d (diff)
*修改lua bind
Diffstat (limited to 'src/lua/common/je_lua_shared.cpp')
-rw-r--r--src/lua/common/je_lua_shared.cpp94
1 files changed, 94 insertions, 0 deletions
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<int, SharedBase*>(key, shared));
+ }
+
+ void SharedBase::removeDependency(int key)
+ {
+ if (!isDependOn(key))
+ return;
+ std::map<int, SharedBase*>::iterator it = mDependencies.find(key);
+ it->second->release();
+ mDependencies.erase(it);
+ }
+
+ void SharedBase::removeDependency(SharedBase* dep)
+ {
+ for (std::map<int, SharedBase*>::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<int, SharedBase*> dep : mDependencies)
+ {
+ if (dep.second == shared)
+ return true;
+ }
+ return false;
+ }
+
+ void SharedBase::clearDependencies()
+ {
+ for (std::pair<int, SharedBase*> 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