diff --git a/src/lua/LuaSmartRef.h b/src/lua/LuaSmartRef.h index b00c455c0..b56df4e2d 100644 --- a/src/lua/LuaSmartRef.h +++ b/src/lua/LuaSmartRef.h @@ -1,12 +1,27 @@ #pragma once #include "LuaCompat.h" +#include class LuaSmartRef { int ref = LUA_REFNIL; public: + LuaSmartRef() = default; + LuaSmartRef(const LuaSmartRef &other) = delete; ~LuaSmartRef(); + + LuaSmartRef(LuaSmartRef &&other) noexcept : LuaSmartRef() + { + swap(*this, other); + } + + LuaSmartRef &operator =(LuaSmartRef other) + { + swap(*this, other); + return *this; + } + void Assign(lua_State *L, int index); // Copies the value before getting reference, stack unchanged. void Clear(); int Push(lua_State *L); // Always pushes exactly one value, possibly nil. @@ -20,4 +35,10 @@ public: { return ref != LUA_REFNIL; } + + friend void swap(LuaSmartRef &one, LuaSmartRef &other) + { + using std::swap; + swap(one.ref, other.ref); + } };