diff options
author | chai <chaifix@163.com> | 2018-12-08 22:05:31 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-12-08 22:05:31 +0800 |
commit | a16ce94158c9cf22a19c0e73dfe2e992a8302af1 (patch) | |
tree | 52d80d950cd410ba82af909e18f77e3b11cd6eda /src/lua/common/je_lua_shared.hpp | |
parent | d34e5c9d7c6135e805f2cc231411cdcc9910190c (diff) |
*去除shared template
Diffstat (limited to 'src/lua/common/je_lua_shared.hpp')
-rw-r--r-- | src/lua/common/je_lua_shared.hpp | 80 |
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ֻһLuaObjectnew - /// 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ֻһLuaObjectnew + /// instanceУômCountͱEngineObjectĹ߳ + /// + void retain(); + void release(); + Object* mObject; + int mCount; + const char* mType; + }; + } // namespace Lua } // namespace JinEngine |