aboutsummaryrefslogtreecommitdiff
path: root/src/lua/common/je_lua_shared.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/common/je_lua_shared.hpp')
-rw-r--r--src/lua/common/je_lua_shared.hpp80
1 files changed, 42 insertions, 38 deletions
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