LuaReference.cpp 783 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * LuaReference.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "LuaReference.h"
  12. VCMI_LIB_NAMESPACE_BEGIN
  13. namespace scripting
  14. {
  15. LuaReference::LuaReference(lua_State * L)
  16. : l(L),
  17. doCleanup(true)
  18. {
  19. key = luaL_ref(l, LUA_REGISTRYINDEX);
  20. }
  21. LuaReference::LuaReference(LuaReference && other) noexcept
  22. : l(other.l),
  23. key(other.key),
  24. doCleanup(false)
  25. {
  26. std::swap(doCleanup, other.doCleanup);
  27. }
  28. LuaReference::~LuaReference()
  29. {
  30. if(doCleanup)
  31. luaL_unref(l, LUA_REGISTRYINDEX, key);
  32. }
  33. void LuaReference::push()
  34. {
  35. lua_rawgeti(l, LUA_REGISTRYINDEX, key);
  36. }
  37. }
  38. VCMI_LIB_NAMESPACE_END