diff options
Diffstat (limited to 'Runner/Scripting/luax_reftable.cpp')
-rw-r--r-- | Runner/Scripting/luax_reftable.cpp | 120 |
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 |