summaryrefslogtreecommitdiff
path: root/Source/3rdParty/Luax/luax_ref.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-14 09:08:07 +0800
committerchai <chaifix@163.com>2019-03-14 09:08:07 +0800
commit8d8c4ff1664625e7428d0d31cd798d9321680cb2 (patch)
tree67af1dad8483ba1c886ae1bd00b9c664ee245385 /Source/3rdParty/Luax/luax_ref.cpp
parent6016ece202eef94ed76bd20d4f7879ccc71cc2e6 (diff)
*luax
Diffstat (limited to 'Source/3rdParty/Luax/luax_ref.cpp')
-rw-r--r--Source/3rdParty/Luax/luax_ref.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/Source/3rdParty/Luax/luax_ref.cpp b/Source/3rdParty/Luax/luax_ref.cpp
index e69de29..544861d 100644
--- a/Source/3rdParty/Luax/luax_ref.cpp
+++ b/Source/3rdParty/Luax/luax_ref.cpp
@@ -0,0 +1,69 @@
+#include "luax_runtime.h"
+#include "luax_ref.h"
+
+namespace Luax
+{
+
+ LuaxRef::LuaxRef(int mode)
+ : mRefID(LUA_NOREF)
+ , mMode(mode)
+ {
+ }
+
+ LuaxRef::~LuaxRef()
+ {
+ }
+
+ LuaxRef::operator bool()
+ {
+ return (mRefID != LUA_NOREF);
+ }
+
+ bool LuaxRef::PushRef(LuaxState& state)
+ {
+ assert(mRefID != LUA_NOREF);
+
+ LuaxRuntime& runtime = LuaxRuntime::Get();
+
+ if (mMode == STRONG_REF)
+ {
+ LuaxRefTable& table = runtime[state.GetHandle()].strongRefTable;
+ table.PushRef(state, mRefID);
+ }
+ else if (mMode == WEAK_REF)
+ {
+ LuaxRefTable& table = runtime[state.GetHandle()].weakRefTable;
+ table.PushRef(state, mRefID);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ void LuaxRef::SetRef(LuaxState& state, int idx)
+ {
+ LuaxRuntime& runtime = LuaxRuntime::Get();
+ if (mMode == STRONG_REF)
+ {
+ LuaxRefTable& table = runtime[state.GetHandle()].strongRefTable;
+ mRefID = table.Ref(state, idx);
+ }
+ else if (mMode == WEAK_REF)
+ {
+ LuaxRefTable& table = runtime[state.GetHandle()].weakRefTable;
+ mRefID = table.Ref(state, idx);
+ }
+ }
+
+ LuaxStrongRef::LuaxStrongRef()
+ : LuaxRef(STRONG_REF)
+ {
+ }
+
+ LuaxWeakRef::LuaxWeakRef()
+ : LuaxRef(WEAK_REF)
+ {
+ }
+
+}