aboutsummaryrefslogtreecommitdiff
path: root/src/lua/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/common')
-rw-r--r--src/lua/common/je_lua.h14
-rw-r--r--src/lua/common/je_lua_object.cpp48
-rw-r--r--src/lua/common/je_lua_object.h28
-rw-r--r--src/lua/common/je_lua_runtime.cpp20
-rw-r--r--src/lua/common/je_lua_shared.cpp25
-rw-r--r--src/lua/common/je_lua_shared.hpp80
6 files changed, 94 insertions, 121 deletions
diff --git a/src/lua/common/je_lua.h b/src/lua/common/je_lua.h
index b390e4c..cacec95 100644
--- a/src/lua/common/je_lua.h
+++ b/src/lua/common/je_lua.h
@@ -20,7 +20,7 @@ namespace JinEngine
///
///
///
- LuaObject* luax_newinstance(lua_State* L, const char* type, SharedBase* shared);
+ LuaObject* luax_newinstance(lua_State* L, const char* type, Shared* shared);
///
/// Copy instance to another lua state.
@@ -35,32 +35,32 @@ namespace JinEngine
///
/// Access lua object by object pointer.
///
- int luax_getobject(lua_State* L, SharedBase* shared);
+ int luax_getobject(lua_State* L, Shared* shared);
///
/// Get object's reference table.
///
- void luax_getreference(lua_State* L, SharedBase* shared);
+ void luax_getreference(lua_State* L, Shared* shared);
///
///
///
- bool luax_addreference(lua_State* L, SharedBase* shared, SharedBase* dep);
+ bool luax_addreference(lua_State* L, Shared* shared, Shared* dep);
///
///
///
- void luax_removereference(lua_State* L, SharedBase* shared);
+ void luax_removereference(lua_State* L, Shared* shared);
///
///
///
- void luax_removereference(lua_State* L, SharedBase* shared, SharedBase* dep);
+ void luax_removereference(lua_State* L, Shared* shared, Shared* dep);
///
///
///
- void luax_removeobject(lua_State* L, SharedBase* shared);
+ void luax_removeobject(lua_State* L, Shared* shared);
///
///
diff --git a/src/lua/common/je_lua_object.cpp b/src/lua/common/je_lua_object.cpp
index de3270a..9aabeb5 100644
--- a/src/lua/common/je_lua_object.cpp
+++ b/src/lua/common/je_lua_object.cpp
@@ -6,48 +6,48 @@ namespace JinEngine
namespace Lua
{
- void LuaObject::bind(SharedBase* obj)
+ void LuaObject::bind(Shared* obj)
{
if (obj)
{
- object = obj;
- object->retain();
- dependencies = new std::map<uint, SharedBase*>();
+ shared = obj;
+ shared->retain();
+ dependencies = new std::map<uint, Shared*>();
}
}
void LuaObject::release()
{
- // Delete lua object table reference and references.
+ // Delete lua shared table reference and references.
if (dependencies)
{
clearDependencies();
delete dependencies;
dependencies = nullptr;
}
- // Try delete engine side object.
- if (object)
+ // Try delete engine side shared.
+ if (shared)
{
- object->release();
- object = nullptr;
+ shared->release();
+ shared = nullptr;
}
}
const char* LuaObject::getObjectType()
{
- return object->getType();
+ return shared->getType();
}
- SharedBase* LuaObject::getShared()
+ Shared* LuaObject::getShared()
{
- return object;
+ return shared;
}
- void LuaObject::setDependency(uint key, SharedBase* dep)
+ void LuaObject::setDependency(uint key, Shared* dep)
{
removeDependency(key);
- dependencies->insert(std::pair<uint, SharedBase*>(key, dep));
- luax_addreference(state, object, dep);
+ dependencies->insert(std::pair<uint, Shared*>(key, dep));
+ luax_addreference(state, shared, dep);
}
void LuaObject::removeDependency(uint key)
@@ -55,19 +55,19 @@ namespace JinEngine
if (!isDependOn(key))
return;
DepsMap::iterator it = dependencies->find(key);
- SharedBase* dep = it->second;
- luax_removereference(state, object, dep);
+ Shared* dep = it->second;
+ luax_removereference(state, shared, dep);
dependencies->erase(it);
}
- void LuaObject::removeDependency(SharedBase* dependency)
+ void LuaObject::removeDependency(Shared* dependency)
{
for (DepsMap::iterator it = dependencies->begin(); it != dependencies->end();)
{
- SharedBase* dep = it->second;
+ Shared* dep = it->second;
if (dep == dependency)
{
- luax_removereference(state, object, dep);
+ luax_removereference(state, shared, dep);
dependencies->erase(it);
}
else
@@ -80,9 +80,9 @@ namespace JinEngine
return dependencies->find(key) != dependencies->end();
}
- bool LuaObject::isDependOn(SharedBase* shared)
+ bool LuaObject::isDependOn(Shared* shared)
{
- for (std::pair<uint, SharedBase*> dep : (*dependencies))
+ for (std::pair<uint, Shared*> dep : (*dependencies))
{
if (dep.second == shared)
return true;
@@ -92,11 +92,11 @@ namespace JinEngine
void LuaObject::clearDependencies()
{
- luax_removereference(state, object);
+ luax_removereference(state, shared);
dependencies->clear();
}
- SharedBase* LuaObject::getDependency(uint key)
+ Shared* LuaObject::getDependency(uint key)
{
if (!isDependOn(key))
return nullptr;
diff --git a/src/lua/common/je_lua_object.h b/src/lua/common/je_lua_object.h
index 296ee03..a81f57c 100644
--- a/src/lua/common/je_lua_object.h
+++ b/src/lua/common/je_lua_object.h
@@ -17,43 +17,33 @@ namespace JinEngine
///
/// Set lua_State and object it bind.
///
- void bind(SharedBase* obj);
+ void bind(Shared* obj);
void release();
const char* getObjectType();
- SharedBase* getShared();
+ Shared* getShared();
template<class T>
- Shared<T>& getShared()
- {
- return *(Shared<T>*)object;
- }
-
- ///
- /// For convenience.
- ///
- template<class T>
T* getObject()
{
- Shared<T>& shared = getShared<T>();
- return shared.getObject();
+ return shared->getObject<T>();
}
- void setDependency(uint key, SharedBase* shared);
+ void setDependency(uint key, Shared* shared);
void removeDependency(uint key);
- void removeDependency(SharedBase* dep);
+ void removeDependency(Shared* dep);
bool isDependOn(uint key);
- bool isDependOn(SharedBase* shared);
+ bool isDependOn(Shared* shared);
void clearDependencies();
- SharedBase* getDependency(uint key);
+ Shared* getDependency(uint key);
int getDependenciesCount();
@@ -61,11 +51,11 @@ namespace JinEngine
// Lua state object.
//////////////////////////////////////////////////////////////////////////////////////////////////////
- using DepsMap = std::map<uint, SharedBase*>;
+ using DepsMap = std::map<uint, Shared*>;
lua_State* state;
- SharedBase* object;
+ Shared* shared;
DepsMap* dependencies;
diff --git a/src/lua/common/je_lua_runtime.cpp b/src/lua/common/je_lua_runtime.cpp
index 055073d..0110d22 100644
--- a/src/lua/common/je_lua_runtime.cpp
+++ b/src/lua/common/je_lua_runtime.cpp
@@ -19,7 +19,7 @@ namespace JinEngine
using DepsMap = LuaObject::DepsMap;
- LuaObject* luax_newinstance(lua_State* L, const char* type, SharedBase* shared)
+ LuaObject* luax_newinstance(lua_State* L, const char* type, Shared* shared)
{
LuaObject* obj = static_cast<LuaObject*>(luax_newinstance(L, type, sizeof(LuaObject)));
obj->state = L;
@@ -46,7 +46,7 @@ namespace JinEngine
DepsMap& srcDeps = *src->dependencies;
for (DepsMap::iterator it = srcDeps.begin(); it != srcDeps.end(); ++it)
{
- SharedBase* shr = it->second;
+ Shared* shr = it->second;
// Try get lua object.
luax_getobject(src->state, shr);
LuaObject* luaObj = (LuaObject*)luax_checktype(src->state, -1, shr->getType());
@@ -54,7 +54,7 @@ namespace JinEngine
luax_copyinstance(to, luaObj);
luax_pop(to, 1); // Pop reference object.
}
- SharedBase * shr = src->getShared();
+ Shared * shr = src->getShared();
LuaObject* obj = luax_newinstance(to, src->getObjectType(), shr);
(*obj->dependencies) = (*src->dependencies);
// Add to objects_table.
@@ -68,13 +68,13 @@ namespace JinEngine
DepsMap::iterator it = deps.begin();
for (; it != deps.end(); ++it)
{
- SharedBase* dep = it->second;
+ Shared* dep = it->second;
luax_addreference(to, shr, dep);
}
return obj;
}
- int luax_getobject(lua_State* L, SharedBase* shared)
+ int luax_getobject(lua_State* L, Shared* shared)
{
luax_getobjectstable(L);
luax_pushlightuserdata(L, shared);
@@ -83,7 +83,7 @@ namespace JinEngine
return 1;
}
- void luax_removeobject(lua_State* L, SharedBase* shared)
+ void luax_removeobject(lua_State* L, Shared* shared)
{
luax_getobjectstable(L);
luax_pushlightuserdata(L, shared);
@@ -152,7 +152,7 @@ namespace JinEngine
return 1;
}
- void luax_getreference(lua_State* L, SharedBase* shared)
+ void luax_getreference(lua_State* L, Shared* shared)
{
luax_getreferencestable(L);
luax_pushlightuserdata(L, shared);
@@ -160,7 +160,7 @@ namespace JinEngine
luax_remove(L, -2);
}
- bool luax_addreference(lua_State* L, SharedBase* shared, SharedBase* dep)
+ bool luax_addreference(lua_State* L, Shared* shared, Shared* dep)
{
luax_getreference(L, shared);
// If no dependencies table, add one.
@@ -186,7 +186,7 @@ namespace JinEngine
return true;
}
- void luax_removereference(lua_State* L, SharedBase* shared)
+ void luax_removereference(lua_State* L, Shared* shared)
{
luax_getreferencestable(L);
luax_pushlightuserdata(L, shared);
@@ -195,7 +195,7 @@ namespace JinEngine
luax_pop(L, 1);
}
- void luax_removereference(lua_State* L, SharedBase* shared, SharedBase* dep)
+ void luax_removereference(lua_State* L, Shared* shared, Shared* dep)
{
luax_getreference(L, shared);
if (luax_isnil(L, -1))
diff --git a/src/lua/common/je_lua_shared.cpp b/src/lua/common/je_lua_shared.cpp
index eecf632..62dfab9 100644
--- a/src/lua/common/je_lua_shared.cpp
+++ b/src/lua/common/je_lua_shared.cpp
@@ -7,23 +7,12 @@ namespace JinEngine
namespace Lua
{
- SharedBase::SharedBase(void* obj, const char* t)
- : mCount(0)
- , mObject(obj)
- , mType(t)
- {
- }
-
- SharedBase::~SharedBase()
- {
- }
-
- void SharedBase::retain()
+ void Shared::retain()
{
++mCount;
}
- void SharedBase::release()
+ void Shared::release()
{
if (--mCount <= 0)
{
@@ -31,15 +20,5 @@ namespace JinEngine
}
}
- bool SharedBase::isType(const char* t)
- {
- return strcmp(mType, t) == 0;
- }
-
- const char* SharedBase::getType()
- {
- return mType;
- }
-
}
} \ No newline at end of file
diff --git a/src/lua/common/je_lua_shared.hpp b/src/lua/common/je_lua_shared.hpp
index 86ee9be..16dd943 100644
--- a/src/lua/common/je_lua_shared.hpp
+++ b/src/lua/common/je_lua_shared.hpp
@@ -5,6 +5,8 @@
#include <vector>
#include <functional>
+#include "libjin/jin.h"
+
namespace JinEngine
{
namespace Lua
@@ -15,68 +17,70 @@ namespace JinEngine
///
/// ̰߳ȫĹģ塣
///
- class SharedBase
+ class Shared
{
public:
- bool isType(const char* t);
-
- const char* getType();
-
- protected:
- friend class LuaObject;
-
- SharedBase(void* obj, const char* t);
-
- SharedBase(const SharedBase&);
-
- ///
- /// ͬһ̵߳lua_StateУLuaObjectEngineObjectӦһһӦLuaObject(lua runtime)ü
- /// ͻաEngine-sideüΪά̵ͬ߳lua_StateͬһEngineObjectÿLuaObjectһ
- /// Sharedʱһüͬһ߳УһEngineObjectֻһLuaObject󶨣new
- /// instanceУômCountͱEngineObjectĹ߳
- ///
- void retain();
-
- void release();
-
- virtual ~SharedBase();
+ Shared(Object* obj, const char* type)
+ : mCount(0)
+ , mObject(obj)
+ , mType(type)
+ {
+ }
- void* mObject;
- int mCount;
- const char* mType;
+ Object* operator->()
+ {
+ return static_cast<Object*>(mObject);
+ }
- };
+ Object* getObject()
+ {
+ return static_cast<Object*>(mObject);
+ }
- template<class T>
- class Shared : public SharedBase
- {
- public:
- Shared(T* obj, const char* type)
- : SharedBase(obj, type)
+ inline const char* getType()
{
+ return mType;
}
- T* operator->()
+ inline bool isType(const char* t)
{
- return static_cast<T*>(mObject);
+ return strcmp(mType, t) == 0;
}
+ template<class T>
T* getObject()
{
return static_cast<T*>(mObject);
}
private:
- Shared(const Shared<T>& shared);
+ friend class LuaObject;
+
+ Shared(const Shared& shared);
+ ///
+ /// Sharedֻڶ
+ ///
~Shared()
{
- T* obj = static_cast<T*>(mObject);
+ Object* obj = static_cast<Object*>(mObject);
delete obj;
}
- };
+ ///
+ /// ͬһ̵߳lua_StateУLuaObjectEngineObjectӦһһӦLuaObject(lua runtime)ü
+ /// ͻաEngine-sideüΪά̵ͬ߳lua_StateͬһEngineObjectÿLuaObjectһ
+ /// Sharedʱһüͬһ߳УһEngineObjectֻһLuaObject󶨣new
+ /// instanceУômCountͱEngineObjectĹ߳
+ ///
+ void retain();
+ void release();
+ Object* mObject;
+ int mCount;
+ const char* mType;
+ };
+
} // namespace Lua
} // namespace JinEngine