aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-08-17 07:50:10 +0800
committerchai <chaifix@163.com>2018-08-17 07:50:10 +0800
commite257f98dbf5c0064037b966a353e0eb1ffcba0a8 (patch)
treec7ce81b7aec5e710c2ff9bdd0887efb8ec12a014 /src
parent952748a86c4ddf1d7e47b358a64904c35bacd4aa (diff)
*update
Diffstat (limited to 'src')
-rw-r--r--src/lua/luaopen_types.h77
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