diff options
Diffstat (limited to 'src/libjin-lua/common/l_reference.cpp')
-rw-r--r-- | src/libjin-lua/common/l_reference.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/libjin-lua/common/l_reference.cpp b/src/libjin-lua/common/l_reference.cpp new file mode 100644 index 0000000..2fcf792 --- /dev/null +++ b/src/libjin-lua/common/l_reference.cpp @@ -0,0 +1,42 @@ +#include "common/je_lua.h" + +#include "l_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 |