diff options
author | chai <chaifix@163.com> | 2019-01-14 16:40:14 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-01-14 16:40:14 +0800 |
commit | 98c9825c49a1674f59eafb3253829ca7d5cac3c1 (patch) | |
tree | bdd2a6da72fc998ff884b011a2260dc72537c25f /src/libjin-lua/common/l_object.cpp | |
parent | 8b00d67febf133e89f6a0bfabc41feed555dc4a9 (diff) |
*rename source file
Diffstat (limited to 'src/libjin-lua/common/l_object.cpp')
-rw-r--r-- | src/libjin-lua/common/l_object.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/libjin-lua/common/l_object.cpp b/src/libjin-lua/common/l_object.cpp new file mode 100644 index 0000000..e3ac158 --- /dev/null +++ b/src/libjin-lua/common/l_object.cpp @@ -0,0 +1,112 @@ +#include "l_object.h" +#include "je_lua.h" + +namespace JinEngine +{ + namespace Lua + { + + void LuaObject::bind(Shared* obj) + { + if (obj) + { + shared = obj; + shared->retain(); + dependencies = new std::map<uint, LuaObject*>(); + } + } + + void LuaObject::release() + { + // Delete lua shared table reference and references. + if (dependencies) + { + clearDependencies(); + delete dependencies; + dependencies = nullptr; + } + // Try delete engine side shared. + if (shared) + { + shared->release(); + shared = nullptr; + } + } + + const char* LuaObject::getObjectType() + { + return type; + } + + Shared* LuaObject::getShared() + { + return shared; + } + + void LuaObject::setDependency(uint key, LuaObject* dep) + { + removeDependency(key); + dependencies->insert(std::pair<uint, LuaObject*>(key, dep)); + luax_addreference(state, this, dep); + } + + void LuaObject::removeDependency(uint key) + { + if (!isDependOn(key)) + return; + DepsMap::iterator it = dependencies->find(key); + LuaObject* dep = it->second; + luax_removereference(state, this, dep); + dependencies->erase(it); + } + + void LuaObject::removeDependency(LuaObject* dependency) + { + for (DepsMap::iterator it = dependencies->begin(); it != dependencies->end();) + { + LuaObject* dep = it->second; + if (dep == dependency) + { + luax_removereference(state, this, dep); + dependencies->erase(it); + } + else + ++it; + } + } + + bool LuaObject::isDependOn(uint key) + { + return dependencies->find(key) != dependencies->end(); + } + + bool LuaObject::isDependOn(LuaObject* shared) + { + for (std::pair<uint, LuaObject*> dep : (*dependencies)) + { + if (dep.second == shared) + return true; + } + return false; + } + + void LuaObject::clearDependencies() + { + luax_removereference(state, this); + dependencies->clear(); + } + + LuaObject* LuaObject::getDependency(uint key) + { + if (!isDependOn(key)) + return nullptr; + return dependencies->find(key)->second; + } + + int LuaObject::getDependenciesCount() + { + return dependencies->size(); + } + + } +}
\ No newline at end of file |