From e92caa97329016d012b46b9d37e1b2c3b613a8f2 Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 10 Nov 2018 20:13:55 +0800 Subject: =?UTF-8?q?*=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lua/common/je_lua_shared.hpp | 99 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/lua/common/je_lua_shared.hpp (limited to 'src/lua/common/je_lua_shared.hpp') diff --git a/src/lua/common/je_lua_shared.hpp b/src/lua/common/je_lua_shared.hpp new file mode 100644 index 0000000..7ad7c1d --- /dev/null +++ b/src/lua/common/je_lua_shared.hpp @@ -0,0 +1,99 @@ +#ifndef __JIN_COMMON_REFERENCE_H +#define __JIN_COMMON_REFERENCE_H + +namespace JinEngine +{ + namespace Lua + { + + /*abstract*/class SharedBase + { + public: + void retain() + { + ++(*count); + } + + void release() + { + if (--(*count) <= 0) + delete this; + } + + // object type string + const char* const type; + + void setUserdata(void* data) + { + userdata = data; + } + + void* getUserdata() + { + return userdata; + } + + protected: + SharedBase(void* obj, const char* t) + : object(obj) + , type(t) + { + count = new int(1); + } + + SharedBase(const SharedBase&); + + virtual ~SharedBase() + { + + } + + void* object; + int* count; + void* userdata; + }; + + template + class Shared : public SharedBase + { + public: + Shared(T* obj, const char* type) + : SharedBase(obj, type) + { + } + + ~Shared() + { + T* obj = static_cast(object); + delete obj; + } + + T* operator->() + { + return static_cast(object); + } + + T* getObject() + { + return static_cast(object); + } + + T* operator &() + { + return static_cast(object); + } + + T& operator *() + { + return *(static_cast(object)); + } + + private: + Shared(const Shared& ref); + + }; + + } +} + +#endif \ No newline at end of file -- cgit v1.1-26-g67d0