From ee8ef0433e36bf354a717bd4af679a0a5af2e6be Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 20 Dec 2018 18:34:50 +0800 Subject: =?UTF-8?q?*=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin-lua/common/je_lua_reference.cpp | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/libjin-lua/common/je_lua_reference.cpp (limited to 'src/libjin-lua/common/je_lua_reference.cpp') diff --git a/src/libjin-lua/common/je_lua_reference.cpp b/src/libjin-lua/common/je_lua_reference.cpp new file mode 100644 index 0000000..72c1c3e --- /dev/null +++ b/src/libjin-lua/common/je_lua_reference.cpp @@ -0,0 +1,42 @@ +#include "common/je_lua.h" + +#include "je_lua_reference.h" + +namespace JinEngine +{ + namespace Lua + { + + LuaRef::LuaRef(lua_State* L, int i) + : mL(L) + { + // Get value. + luax_pushvalue(mL, i); + // Set reference. + luax_getreferencestable(L); + luax_pushvalue(mL, -2); + mIndex = luax_ref(mL, -2); + luax_pop(L, 3); + } + + LuaRef::~LuaRef() + { + unref(); + } + + void LuaRef::unref() + { + luax_getreferencestable(mL); + luax_unref(mL, -1, mIndex); + luax_pop(mL, 1); + } + + void LuaRef::push() + { + luax_getreferencestable(mL); + luax_rawgeti(mL, -1, mIndex); + luax_remove(mL, -2); + } + + } +} \ No newline at end of file -- cgit v1.1-26-g67d0