diff options
Diffstat (limited to 'src/lua/common/je_lua_shared.cpp')
-rw-r--r-- | src/lua/common/je_lua_shared.cpp | 94 |
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 |