From 27ceb07e55a899fb1a0178ec4b7edaf0ed5d1dc4 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sun, 28 Aug 2016 19:03:43 +0200 Subject: [PATCH] Lua/LuaInstance: Add move constructor/operator Former-commit-id: 654b377ce33592ef46de7897c1e0bdf6c7f07c1f [formerly 9327749669eecb4a1d1d5cf56da5b0466a3b3886] [formerly 871d797c2fa0480b80d0436da16854eeeb5e8cd9 [formerly 2cd45f642aaaa3859f66967e0e9ef99a8a3e2a16]] Former-commit-id: 14fc3c4a28f3c596488c7d70ef4f4620678a472e [formerly 9e069af52441137bbccab5e70feb1310b5416754] Former-commit-id: 0a6cf051bb0eb5bf439e5eb1071b83e78feacd35 --- include/Nazara/Lua/LuaInstance.hpp | 4 ++-- include/Nazara/Lua/LuaInstance.inl | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/include/Nazara/Lua/LuaInstance.hpp b/include/Nazara/Lua/LuaInstance.hpp index 9affe6f87..e3bc517f8 100644 --- a/include/Nazara/Lua/LuaInstance.hpp +++ b/include/Nazara/Lua/LuaInstance.hpp @@ -31,7 +31,7 @@ namespace Nz public: LuaInstance(); LuaInstance(const LuaInstance&) = delete; - LuaInstance(LuaInstance&&) = delete; ///TODO + inline LuaInstance(LuaInstance&& instance) noexcept; ~LuaInstance(); void ArgCheck(bool condition, unsigned int argNum, const char* error); @@ -172,7 +172,7 @@ namespace Nz void* ToUserdata(int index, const String& tname) const; LuaInstance& operator=(const LuaInstance&) = delete; - LuaInstance& operator=(LuaInstance&&) = delete; ///TODO + inline LuaInstance& operator=(LuaInstance&& instance) noexcept; static int GetIndexOfUpValue(int upValue); static LuaInstance* GetInstance(lua_State* state); diff --git a/include/Nazara/Lua/LuaInstance.inl b/include/Nazara/Lua/LuaInstance.inl index 24d4fcf34..f9f5e662f 100644 --- a/include/Nazara/Lua/LuaInstance.inl +++ b/include/Nazara/Lua/LuaInstance.inl @@ -13,6 +13,33 @@ namespace Nz { + inline LuaInstance::LuaInstance(LuaInstance&& instance) noexcept : + m_memoryLimit(instance.m_memoryLimit), + m_memoryUsage(instance.m_memoryUsage), + m_timeLimit(m_timeLimit), + m_clock(std::move(m_clock)), + m_lastError(std::move(m_lastError)), + m_state(m_state), + m_level(m_level) + { + instance.m_state = nullptr; + } + + inline LuaInstance& LuaInstance::operator=(LuaInstance&& instance) noexcept + { + m_clock = std::move(m_clock); + m_lastError = std::move(m_lastError); + m_level = m_level; + m_memoryLimit = instance.m_memoryLimit; + m_memoryUsage = instance.m_memoryUsage; + m_state = m_state; + m_timeLimit = m_timeLimit; + + instance.m_state = nullptr; + + return *this; + } + // Functions args inline unsigned int LuaImplQueryArg(const LuaInstance& instance, int index, bool* arg, TypeTag) {