summaryrefslogtreecommitdiff
path: root/Runner/Scripting/luax_reftable.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-10-17 16:01:30 +0800
committerchai <chaifix@163.com>2021-10-17 16:01:30 +0800
commit6e73ca6ada8a41692809dae5db89c8db0675ce1e (patch)
tree3ca6f06b29b3e2c183750ddcff8d7a09d0785e6b /Runner/Scripting/luax_reftable.cpp
parente13f699ee5f575198552d94ada1167305c82bb2f (diff)
-Runner
Diffstat (limited to 'Runner/Scripting/luax_reftable.cpp')
-rw-r--r--Runner/Scripting/luax_reftable.cpp120
1 files changed, 0 insertions, 120 deletions
diff --git a/Runner/Scripting/luax_reftable.cpp b/Runner/Scripting/luax_reftable.cpp
deleted file mode 100644
index 461e2d9..0000000
--- a/Runner/Scripting/luax_reftable.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-#include "luax_reftable.h"
-#include "luax_state.h"
-
-namespace Luax
-{
-
- LuaxRefTable::LuaxRefTable()
- : mState(nullptr)
- {
- }
-
- LuaxRefTable::~LuaxRefTable()
- {
- }
-
- void LuaxRefTable::Init(LuaxState& state, cc8* name, cc8* mode)
- {
- assert(!mState);
- assert(name);
-
- mName = name;
- mMode = 0;
- for (int i = 0; mode && mode[i]; ++i)
- {
- if (mode[i] == 'k') mMode |= WEAK_KEY;
- else if (mode[i] == 'v') mMode |= WEAK_VALUE;
- }
- mState = state.GetHandle();
-
- state.GetField(LUA_REGISTRYINDEX, name); // register[mName]
- if (state.IsNil(-1))
- {
- state.Pop();
-
- lua_newtable(state); // ref table
- int ridx = state.AbsIndex(-1);
- lua_newtable(state); // metatable of ref table
- int idx = state.AbsIndex(-1);
-
- // __mode
- if (mode)
- {
- state.Push(mode);
- state.SetField(idx, "__mode");
- }
-
- state.Settop(idx);
- lua_setmetatable(state, ridx);
-
- state.Settop(ridx);
- state.SetField(LUA_REGISTRYINDEX, name);
- }
- else
- {
- state.Pop();
- }
- }
-
- bool LuaxRefTable::IsKeyWeak()
- {
- assert(mState);
-
- return mMode & WEAK_KEY;
- }
-
- bool LuaxRefTable::IsValueWeak()
- {
- assert(mState);
-
- return mMode & WEAK_VALUE;
- }
-
- int LuaxRefTable::Ref(LuaxState& state, int idx)
- {
- assert(mState);
-
- idx = state.AbsIndex(idx);
- state.GetField(LUA_REGISTRYINDEX, mName); // ref table
- lua_pushvalue(state, idx); // stuff
- int refID = luaL_ref(state, -2);
- assert(refID != LUA_NOREF);
- state.Pop();
- return refID;
- }
-
- void LuaxRefTable::Unref(LuaxState& state, int refID)
- {
- assert(mState);
-
- state.GetField(LUA_REGISTRYINDEX, mName); // ref table
- luaL_unref(state, -1, refID);
- state.Pop();
- return;
- }
-
- void LuaxRefTable::PushRefTable(LuaxState& state)
- {
- assert(mState);
-
- lua_getfield(state, LUA_REGISTRYINDEX, mName);
- }
-
- void LuaxRefTable::PushRef(LuaxState& state, int refID)
- {
- assert(mState);
-
- lua_getfield(state, LUA_REGISTRYINDEX, mName);
- lua_rawgeti(state, -1, refID);
- lua_replace(state, -2);
- }
-
- void LuaxRefTable::Clear(LuaxState& state)
- {
- assert(mState);
-
- lua_newtable(state);
- state.SetField(LUA_REGISTRYINDEX, mName);
- }
-
-} \ No newline at end of file