From 7c2f33bdf37de7acf9b0728a115377081344db1c Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 11 Nov 2018 20:18:26 +0800 Subject: =?UTF-8?q?*=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lua/common/je_lua_proxy.h | 37 ++++++++++++++++----------- src/lua/common/je_lua_shared.hpp | 54 ++++++++++++++++------------------------ 2 files changed, 44 insertions(+), 47 deletions(-) (limited to 'src/lua/common') diff --git a/src/lua/common/je_lua_proxy.h b/src/lua/common/je_lua_proxy.h index 56e5fee..b476aa6 100644 --- a/src/lua/common/je_lua_proxy.h +++ b/src/lua/common/je_lua_proxy.h @@ -1,6 +1,8 @@ #ifndef __JIN_COMMON_PROXY_H #define __JIN_COMMON_PROXY_H +#include "../luax.h" + #include "je_lua_shared.hpp" namespace JinEngine @@ -11,56 +13,61 @@ namespace JinEngine class Proxy { public: - void bind(SharedBase* ref) + void bind(SharedBase* shared) { - if (ref == nullptr) + if (shared == nullptr) return; - shared = ref; + reference = shared; } void release() { - if (shared != nullptr) + if (reference != nullptr) { - shared->release(); - shared = nullptr; + reference->release(); + reference = nullptr; } } void retain() { - if (shared != nullptr) - shared->retain(); + if (reference != nullptr) + reference->retain(); } void setUserdata(void* data) { - if (shared != nullptr) - shared->setUserdata(data); + if (reference != nullptr) + reference->setUserdata(data); } template Shared& getShared() { - return *(static_cast*>(shared)); + return *(Shared*) reference; } template T* getObject() { - Shared& ref = getShared(); - return ref.getObject(); + Shared& shared = getShared(); + return shared.getObject(); } const char* getObjectType() { - return shared->type; + return reference->type; } - SharedBase* shared; + SharedBase* reference; }; + inline Proxy* luax_newinstance(lua_State* L, const char* type) + { + return static_cast(luax_newinstance(L, type, sizeof(Proxy))); + } + } // namespace Lua } // namespace JinEngine diff --git a/src/lua/common/je_lua_shared.hpp b/src/lua/common/je_lua_shared.hpp index 7ad7c1d..53f557a 100644 --- a/src/lua/common/je_lua_shared.hpp +++ b/src/lua/common/je_lua_shared.hpp @@ -11,46 +11,45 @@ namespace JinEngine public: void retain() { - ++(*count); + ++count; } void release() { - if (--(*count) <= 0) + if (--count <= 0) delete this; } // object type string const char* const type; - void setUserdata(void* data) - { - userdata = data; - } + void setUserdata(void* data) + { + userdata = data; + } - void* getUserdata() - { - return userdata; - } + void* getUserdata() + { + return userdata; + } protected: SharedBase(void* obj, const char* t) - : object(obj) + : count(1) + , object(obj) , type(t) { - count = new int(1); } SharedBase(const SharedBase&); virtual ~SharedBase() { - } void* object; - int* count; - void* userdata; + int count; + void* userdata; }; template @@ -62,35 +61,26 @@ namespace JinEngine { } - ~Shared() - { - T* obj = static_cast(object); - delete obj; - } - T* operator->() { - return static_cast(object); + return (T*)object; } T* getObject() { - return static_cast(object); + return (T*)object; } - T* operator &() - { - return static_cast(object); - } + private: + // Disable copy constructor. + Shared(const Shared& shared); - T& operator *() + ~Shared() { - return *(static_cast(object)); + T* obj = static_cast(object); + delete obj; } - private: - Shared(const Shared& ref); - }; } -- cgit v1.1-26-g67d0