diff options
author | chai <chaifix@163.com> | 2021-10-17 23:05:01 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-10-17 23:05:01 +0800 |
commit | 7c8c68d79343d04be382334c15a73d079450857c (patch) | |
tree | 9aaacc042f0b7eeb4123c07dcc5f49c14fd8026c /Runtime/Scripting/LuaBindRefTable.cpp | |
parent | 6e73ca6ada8a41692809dae5db89c8db0675ce1e (diff) |
*misc
Diffstat (limited to 'Runtime/Scripting/LuaBindRefTable.cpp')
-rw-r--r-- | Runtime/Scripting/LuaBindRefTable.cpp | 120 |
1 files changed, 0 insertions, 120 deletions
diff --git a/Runtime/Scripting/LuaBindRefTable.cpp b/Runtime/Scripting/LuaBindRefTable.cpp deleted file mode 100644 index 39ef9ab..0000000 --- a/Runtime/Scripting/LuaBindRefTable.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "LuaBindRefTable.h" -#include "LuaBindState.h" - -namespace LuaBind -{ - - RefTable::RefTable() - : mState(nullptr) - { - } - - RefTable::~RefTable() - { - } - - void RefTable::Init(State& 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 RefTable::IsKeyWeak() - { - assert(mState); - - return mMode & WEAK_KEY; - } - - bool RefTable::IsValueWeak() - { - assert(mState); - - return mMode & WEAK_VALUE; - } - - int RefTable::Ref(State& 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 RefTable::Unref(State& state, int refID) - { - assert(mState); - - state.GetField(LUA_REGISTRYINDEX, mName); // ref table - luaL_unref(state, -1, refID); - state.Pop(); - return; - } - - void RefTable::PushRefTable(State& state) - { - assert(mState); - - lua_getfield(state, LUA_REGISTRYINDEX, mName); - } - - void RefTable::PushRef(State& state, int refID) - { - assert(mState); - - lua_getfield(state, LUA_REGISTRYINDEX, mName); - lua_rawgeti(state, -1, refID); - lua_replace(state, -2); - } - - void RefTable::Clear(State& state) - { - assert(mState); - - lua_newtable(state); - state.SetField(LUA_REGISTRYINDEX, mName); - } - -}
\ No newline at end of file |