diff options
Diffstat (limited to 'src/lua/common')
-rw-r--r-- | src/lua/common/je_lua_common.h | 2 | ||||
-rw-r--r-- | src/lua/common/je_lua_proxy.h | 30 | ||||
-rw-r--r-- | src/lua/common/je_lua_shared.hpp (renamed from src/lua/common/je_lua_reference.hpp) | 43 |
3 files changed, 43 insertions, 32 deletions
diff --git a/src/lua/common/je_lua_common.h b/src/lua/common/je_lua_common.h index 1d772a5..82c550a 100644 --- a/src/lua/common/je_lua_common.h +++ b/src/lua/common/je_lua_common.h @@ -3,7 +3,7 @@ #include "je_lua_port.h" #include "je_lua_proxy.h" -#include "je_lua_reference.hpp" +#include "je_lua_shared.hpp" #include "je_lua_error.h" #endif
\ No newline at end of file diff --git a/src/lua/common/je_lua_proxy.h b/src/lua/common/je_lua_proxy.h index b428dc9..56e5fee 100644 --- a/src/lua/common/je_lua_proxy.h +++ b/src/lua/common/je_lua_proxy.h @@ -1,7 +1,7 @@ #ifndef __JIN_COMMON_PROXY_H #define __JIN_COMMON_PROXY_H -#include "je_lua_reference.hpp" +#include "je_lua_shared.hpp" namespace JinEngine { @@ -11,53 +11,53 @@ namespace JinEngine class Proxy { public: - void bind(RefBase* ref) + void bind(SharedBase* ref) { if (ref == nullptr) return; - reference = ref; + shared = ref; } void release() { - if (reference != nullptr) + if (shared != nullptr) { - reference->release(); - reference = nullptr; + shared->release(); + shared = nullptr; } } void retain() { - if (reference != nullptr) - reference->retain(); + if (shared != nullptr) + shared->retain(); } void setUserdata(void* data) { - if (reference != nullptr) - reference->setUserdata(data); + if (shared != nullptr) + shared->setUserdata(data); } template<class T> - Ref<T>& getRef() + Shared<T>& getShared() { - return *(Ref<T>*) reference; + return *(static_cast<Shared<T>*>(shared)); } template<class T> T* getObject() { - Ref<T>& ref = getRef<T>(); + Shared<T>& ref = getShared<T>(); return ref.getObject(); } const char* getObjectType() { - return reference->type; + return shared->type; } - RefBase* reference; + SharedBase* shared; }; diff --git a/src/lua/common/je_lua_reference.hpp b/src/lua/common/je_lua_shared.hpp index ba918bb..7ad7c1d 100644 --- a/src/lua/common/je_lua_reference.hpp +++ b/src/lua/common/je_lua_shared.hpp @@ -6,17 +6,17 @@ namespace JinEngine namespace Lua { - /*abstract*/class RefBase + /*abstract*/class SharedBase { public: void retain() { - ++count; + ++(*count); } void release() { - if (--count <= 0) + if (--(*count) <= 0) delete this; } @@ -34,34 +34,35 @@ namespace JinEngine } protected: - RefBase(void* obj, const char* t) - : count(1) - , object(obj) + SharedBase(void* obj, const char* t) + : object(obj) , type(t) { + count = new int(1); } - RefBase(const RefBase&); + SharedBase(const SharedBase&); - virtual ~RefBase() + virtual ~SharedBase() { + } void* object; - int count; + int* count; void* userdata; }; template<class T> - class Ref : public RefBase + class Shared : public SharedBase { public: - Ref(T* obj, const char* type) - : RefBase(obj, type) + Shared(T* obj, const char* type) + : SharedBase(obj, type) { } - ~Ref() + ~Shared() { T* obj = static_cast<T*>(object); delete obj; @@ -69,16 +70,26 @@ namespace JinEngine T* operator->() { - return (T*)object; + return static_cast<T*>(object); } T* getObject() { - return (T*)object; + return static_cast<T*>(object); + } + + T* operator &() + { + return static_cast<T*>(object); + } + + T& operator *() + { + return *(static_cast<T*>(object)); } private: - Ref(const Ref<T>& ref); + Shared(const Shared<T>& ref); }; |