From 639b34294ffc20721c66db46e59e07d9100ac4b8 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 10 Sep 2020 20:30:31 +0800 Subject: *init --- Runner/Scripting/luax_ref.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Runner/Scripting/luax_ref.cpp (limited to 'Runner/Scripting/luax_ref.cpp') diff --git a/Runner/Scripting/luax_ref.cpp b/Runner/Scripting/luax_ref.cpp new file mode 100644 index 0000000..d4be775 --- /dev/null +++ b/Runner/Scripting/luax_ref.cpp @@ -0,0 +1,72 @@ +#include "luax_vm.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); + + LuaxVM* vm = state.GetVM(); + if (!vm) return false; + if (mMode == STRONG_REF) + { + LuaxRefTable& table = vm->GetStrongRefTable(); + table.PushRef(state, mRefID); + } + else if (mMode == WEAK_REF) + { + LuaxRefTable& table = vm->GetWeakRefTable(); + table.PushRef(state, mRefID); + } + else + { + state.PushNil(); + return false; + } + return true; + } + + void LuaxRef::SetRef(LuaxState& state, int idx) + { + LuaxVM* vm = state.GetVM(); + if (!vm) return; + if (mMode == STRONG_REF) + { + LuaxRefTable& table = vm->GetStrongRefTable(); + mRefID = table.Ref(state, idx); + } + else if (mMode == WEAK_REF) + { + LuaxRefTable& table = vm->GetWeakRefTable(); + mRefID = table.Ref(state, idx); + } + } + + LuaxStrongRef::LuaxStrongRef() + : LuaxRef(STRONG_REF) + { + } + + LuaxWeakRef::LuaxWeakRef() + : LuaxRef(WEAK_REF) + { + } + +} -- cgit v1.1-26-g67d0