summaryrefslogtreecommitdiff
path: root/Runtime/Lua/LuaBind/LuaBindRef.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-10-18 19:56:41 +0800
committerchai <chaifix@163.com>2021-10-18 19:56:41 +0800
commit45328cbadd8a946c19a77301f218efbf650e2f28 (patch)
tree8ec4f3a9737b2cbb9744f8347a56783743be2a4c /Runtime/Lua/LuaBind/LuaBindRef.h
parentb5702ece4c2cf751c252e76fb885a7ec41ccabe8 (diff)
*misc
Diffstat (limited to 'Runtime/Lua/LuaBind/LuaBindRef.h')
-rw-r--r--Runtime/Lua/LuaBind/LuaBindRef.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/Runtime/Lua/LuaBind/LuaBindRef.h b/Runtime/Lua/LuaBind/LuaBindRef.h
new file mode 100644
index 0000000..93b30be
--- /dev/null
+++ b/Runtime/Lua/LuaBind/LuaBindRef.h
@@ -0,0 +1,62 @@
+#ifndef __LUA_BIND_REF_H__
+#define __LUA_BIND_REF_H__
+
+#include "LuaBindConfig.h"
+#include "LuaBindState.h"
+
+namespace LuaBind
+{
+
+ //
+ // 引用,存在LUA_REGISTRYINDEX下面的两个表里
+ //
+ class Ref
+ {
+ public:
+
+ enum RefMode
+ {
+ STRONG_REF,
+ WEAK_REF
+ };
+
+ Ref(int mode = STRONG_REF);
+ virtual ~Ref();
+
+ operator bool();
+
+ void SetRef(State& state, int idx);
+ bool PushRef(State& state);
+
+ int GetRefID();
+
+ private:
+
+ int mRefID; // luaL_ref
+ int mMode; // strong or weak
+
+ };
+
+ //
+ // 强引用,在LUA_REGISTRYINDEX["_LUA_BIND_STRONGREF_TABLE"]里,保证lua object不会被回收。
+ //
+ class StrongRef: public Ref
+ {
+ public:
+ StrongRef();
+
+ };
+
+ //
+ // 弱引用,在LUA_REGISTRYINDEX["_LUA_BIND_WEAKREF_TABLE"]里,不影响lua object的回收,只是作为一个方便取lua object的映射。
+ //
+ class WeakRef : public Ref
+ {
+ public:
+ WeakRef();
+
+ };
+
+}
+
+#endif \ No newline at end of file