diff options
Diffstat (limited to 'src/lua/luaopen_types.h')
-rw-r--r-- | src/lua/luaopen_types.h | 77 |
1 files changed, 29 insertions, 48 deletions
diff --git a/src/lua/luaopen_types.h b/src/lua/luaopen_types.h index 78083c6..47eb3be 100644 --- a/src/lua/luaopen_types.h +++ b/src/lua/luaopen_types.h @@ -22,58 +22,39 @@ namespace jin namespace lua { - class Reference - { - public: - - Reference(void* obj) - : count(1) - , object(obj) - { - } - void retain() - { - ++count; - } - void release() - { - if (--count <= 0) - delete this; - } - - protected: - Reference(const Reference&); - virtual ~Reference() - { - } - void* object; - int count; + class Reference + { + public: + Reference(void* obj) + : count(1) + , object(obj) + { + } - }; + void retain() + { + ++count; + } - template<class T> - class Ref : public Reference - { - public: - Ref(T* obj) - : Reference(obj) - { - } - ~Ref() - { - T* obj = (T*)object; - delete obj; - } - T* operator->() + void release() { - return (T*)object; + if (--count <= 0) + delete this; } + + template<class T> T* getObject() { return (T*)object; } + private: - Ref(const Ref<T>& ref); + Reference(const Reference&); + virtual ~Reference() {} + + void* object; + int count; + }; class Proxy @@ -97,11 +78,11 @@ namespace lua } } - template<class T> - Ref<T>& getRef() - { - return *(Ref<T>*) reference; - } + template<class T> + T* getObject() + { + return reference->getObject<T>(); + } const char* type; // type name and metatable name Reference* reference; // acctual object binded |