summaryrefslogtreecommitdiff
path: root/Runtime/Scripting/luax_ref.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-19 09:13:58 +0800
committerchai <chaifix@163.com>2020-10-19 09:13:58 +0800
commitf0807fc44dde14531759306317611bab87c8fccf (patch)
tree6e78fed61c16a70cda5fa732635f89f9faac9720 /Runtime/Scripting/luax_ref.h
parent639b34294ffc20721c66db46e59e07d9100ac4b8 (diff)
+gamelab proj
Diffstat (limited to 'Runtime/Scripting/luax_ref.h')
-rw-r--r--Runtime/Scripting/luax_ref.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/Runtime/Scripting/luax_ref.h b/Runtime/Scripting/luax_ref.h
new file mode 100644
index 0000000..d0001f2
--- /dev/null
+++ b/Runtime/Scripting/luax_ref.h
@@ -0,0 +1,62 @@
+#ifndef __LUAX_REF_H__
+#define __LUAX_REF_H__
+
+#include "luax_config.h"
+#include "luax_state.h"
+
+namespace Luax
+{
+
+ ///
+ /// 引用,存在LUA_REGISTRYINDEX下面的两个表里
+ ///
+ class LuaxRef
+ {
+ public:
+
+ enum RefMode
+ {
+ STRONG_REF,
+ WEAK_REF
+ };
+
+ LuaxRef(int mode = STRONG_REF);
+ virtual ~LuaxRef();
+
+ operator bool();
+
+ void SetRef(LuaxState& state, int idx);
+ bool PushRef(LuaxState& state);
+
+ int GetRefID();
+
+ private:
+
+ int mRefID; // luaL_ref
+ int mMode; // strong or weak
+
+ };
+
+ ///
+ /// 强引用,在LUA_REGISTRYINDEX["_LUAX_STRONGREF_TABLE"]里,保证lua object不会被回收。
+ ///
+ class LuaxStrongRef: public LuaxRef
+ {
+ public:
+ LuaxStrongRef();
+
+ };
+
+ ///
+ /// 弱引用,在LUA_REGISTRYINDEX["_LUAX_WEAKREF_TABLE"]里,不影响lua object的回收,只是作为一个方便取lua object的映射。
+ ///
+ class LuaxWeakRef : public LuaxRef
+ {
+ public:
+ LuaxWeakRef();
+
+ };
+
+}
+
+#endif \ No newline at end of file