diff --git a/include/Nazara/Lua/LuaInstance.hpp b/include/Nazara/Lua/LuaInstance.hpp index cdf728c62..b194bf11f 100644 --- a/include/Nazara/Lua/LuaInstance.hpp +++ b/include/Nazara/Lua/LuaInstance.hpp @@ -42,8 +42,8 @@ namespace Nz bool Call(unsigned int argCount); bool Call(unsigned int argCount, unsigned int resultCount); - template T Check(int index); - template T Check(int index, T defValue); + template T Check(unsigned int* index); + template T Check(unsigned int* index, T defValue); void CheckAny(int index) const; bool CheckBoolean(int index) const; bool CheckBoolean(int index, bool defValue) const; diff --git a/include/Nazara/Lua/LuaInstance.inl b/include/Nazara/Lua/LuaInstance.inl index 1fa6343c7..20f568f64 100644 --- a/include/Nazara/Lua/LuaInstance.inl +++ b/include/Nazara/Lua/LuaInstance.inl @@ -9,124 +9,124 @@ namespace Nz { // Functions args - inline bool LuaImplQueryArg(LuaInstance& instance, unsigned int index, TypeTag) + inline bool LuaImplQueryArg(LuaInstance& instance, unsigned int* index, TypeTag) { - return instance.CheckBoolean(index); + return instance.CheckBoolean((*index)++); } - inline bool LuaImplQueryArg(LuaInstance& instance, unsigned int index, bool defValue, TypeTag) + inline bool LuaImplQueryArg(LuaInstance& instance, unsigned int* index, bool defValue, TypeTag) { - return instance.CheckBoolean(index, defValue); + return instance.CheckBoolean((*index)++, defValue); } - inline double LuaImplQueryArg(LuaInstance& instance, unsigned int index, TypeTag) + inline double LuaImplQueryArg(LuaInstance& instance, unsigned int* index, TypeTag) { - return instance.CheckNumber(index); + return instance.CheckNumber((*index)++); } - inline double LuaImplQueryArg(LuaInstance& instance, unsigned int index, double defValue, TypeTag) + inline double LuaImplQueryArg(LuaInstance& instance, unsigned int* index, double defValue, TypeTag) { - return instance.CheckNumber(index, defValue); + return instance.CheckNumber((*index)++, defValue); } - inline float LuaImplQueryArg(LuaInstance& instance, unsigned int index, TypeTag) + inline float LuaImplQueryArg(LuaInstance& instance, unsigned int* index, TypeTag) { - return static_cast(instance.CheckNumber(index)); + return static_cast(instance.CheckNumber((*index)++)); } - inline float LuaImplQueryArg(LuaInstance& instance, unsigned int index, float defValue, TypeTag) + inline float LuaImplQueryArg(LuaInstance& instance, unsigned int* index, float defValue, TypeTag) { - return static_cast(instance.CheckNumber(index, defValue)); + return static_cast(instance.CheckNumber((*index)++, defValue)); } template - std::enable_if_t::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int index, TypeTag) + std::enable_if_t::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int* index, TypeTag) { return static_cast(LuaImplQueryArg(instance, index, TypeTag::type>())); } template - std::enable_if_t::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int index, T defValue, TypeTag) + std::enable_if_t::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int* index, T defValue, TypeTag) { using UnderlyingT = std::underlying_type_t; return static_cast(LuaImplQueryArg(instance, index, static_cast(defValue), TypeTag())); } template - std::enable_if_t::value && !std::is_unsigned::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int index, TypeTag) + std::enable_if_t::value && !std::is_unsigned::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int* index, TypeTag) { - return static_cast(instance.CheckInteger(index)); + return static_cast(instance.CheckInteger((*index)++)); } template - std::enable_if_t::value && !std::is_unsigned::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int index, T defValue, TypeTag) + std::enable_if_t::value && !std::is_unsigned::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int* index, T defValue, TypeTag) { - return static_cast(instance.CheckInteger(index, defValue)); + return static_cast(instance.CheckInteger((*index)++, defValue)); } template - std::enable_if_t::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int index, TypeTag) + std::enable_if_t::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int* index, TypeTag) { using SignedT = std::make_signed_t; return static_cast(LuaImplQueryArg(instance, index, TypeTag())); } template - std::enable_if_t::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int index, T defValue, TypeTag) + std::enable_if_t::value, T> LuaImplQueryArg(LuaInstance& instance, unsigned int* index, T defValue, TypeTag) { using SignedT = std::make_signed_t; return static_cast(LuaImplQueryArg(instance, index, static_cast(defValue), TypeTag())); } - inline std::string LuaImplQueryArg(LuaInstance& instance, unsigned int index, TypeTag) + inline std::string LuaImplQueryArg(LuaInstance& instance, unsigned int* index, TypeTag) { std::size_t strLength = 0; - const char* str = instance.CheckString(index, &strLength); + const char* str = instance.CheckString((*index)++, &strLength); return std::string(str, strLength); } - inline std::string LuaImplQueryArg(LuaInstance& instance, unsigned int index, const std::string& defValue, TypeTag) + inline std::string LuaImplQueryArg(LuaInstance& instance, unsigned int* index, const std::string& defValue, TypeTag) { std::size_t strLength = 0; - const char* str = instance.CheckString(index, defValue.c_str(), &strLength); + const char* str = instance.CheckString((*index)++, defValue.c_str(), &strLength); return std::string(str, strLength); } - inline String LuaImplQueryArg(LuaInstance& instance, unsigned int index, TypeTag) + inline String LuaImplQueryArg(LuaInstance& instance, unsigned int* index, TypeTag) { std::size_t strLength = 0; - const char* str = instance.CheckString(index, &strLength); + const char* str = instance.CheckString((*index)++, &strLength); return String(str, strLength); } - inline String LuaImplQueryArg(LuaInstance& instance, unsigned int index, const String& defValue, TypeTag) + inline String LuaImplQueryArg(LuaInstance& instance, unsigned int* index, const String& defValue, TypeTag) { std::size_t strLength = 0; - const char* str = instance.CheckString(index, defValue.GetConstBuffer(), &strLength); + const char* str = instance.CheckString((*index)++, defValue.GetConstBuffer(), &strLength); return String(str, strLength); } template - T LuaImplQueryArg(LuaInstance& instance, unsigned int index, TypeTag) + T LuaImplQueryArg(LuaInstance& instance, unsigned int* index, TypeTag) { return LuaImplQueryArg(instance, index, TypeTag()); } template - T LuaImplQueryArg(LuaInstance& instance, unsigned int index, const T& defValue, TypeTag tag) + T LuaImplQueryArg(LuaInstance& instance, unsigned int* index, const T& defValue, TypeTag tag) { - if (instance.IsValid(index)) + if (instance.IsValid(*index)) return LuaImplQueryArg(instance, index, tag); else return defValue; } template - T LuaImplQueryArg(LuaInstance& instance, unsigned int index, const T& defValue, TypeTag) + T LuaImplQueryArg(LuaInstance& instance, unsigned int* index, const T& defValue, TypeTag) { return LuaImplQueryArg(instance, index, defValue, TypeTag()); } @@ -203,9 +203,9 @@ namespace Nz struct LuaImplArgProcesser { template - static void Process(LuaInstance& instance, ArgContainer& args, DefArgContainer& defArgs) + static void Process(LuaInstance& instance, unsigned int* argIndex, ArgContainer& args, DefArgContainer& defArgs) { - std::get(args) = std::move(LuaImplQueryArg(instance, N + 1, std::get() - N + FirstDefArg - 1>(defArgs), TypeTag())); + std::get(args) = std::move(LuaImplQueryArg(instance, argIndex, std::get() - N + FirstDefArg - 1>(defArgs), TypeTag())); } }; @@ -213,11 +213,11 @@ namespace Nz struct LuaImplArgProcesser { template - static void Process(LuaInstance& instance, ArgContainer& args, DefArgContainer& defArgs) + static void Process(LuaInstance& instance, unsigned int* argIndex, ArgContainer& args, DefArgContainer& defArgs) { NazaraUnused(defArgs); - std::get(args) = std::move(LuaImplQueryArg(instance, N + 1, TypeTag())); + std::get(args) = std::move(LuaImplQueryArg(instance, argIndex, TypeTag())); } }; @@ -244,6 +244,7 @@ namespace Nz void ProcessArgs() { + m_index = 1; ProcessArgs<0, Args...>(); } @@ -272,7 +273,7 @@ namespace Nz template void ProcessArgs() { - LuaImplArgProcesser<(N >= FirstDefArg)>::template Process(m_instance, m_args, m_defaultArgs); + LuaImplArgProcesser<(N >= FirstDefArg)>::template Process(m_instance, &m_index, m_args, m_defaultArgs); } template @@ -285,6 +286,7 @@ namespace Nz ArgContainer m_args; DefArgContainer m_defaultArgs; LuaInstance& m_instance; + unsigned int m_index; }; }; @@ -312,6 +314,7 @@ namespace Nz void ProcessArgs() { + m_index = 1; ProcessArgs<0, Args...>(); } @@ -354,7 +357,7 @@ namespace Nz template void ProcessArgs() { - LuaImplArgProcesser<(N >= FirstDefArg)>::template Process(m_instance, m_args, m_defaultArgs); + LuaImplArgProcesser<(N >= FirstDefArg)>::template Process(m_instance, &m_index, m_args, m_defaultArgs); } template @@ -368,17 +371,18 @@ namespace Nz DefArgContainer m_defaultArgs; LuaInstance& m_instance; T& m_object; + unsigned int m_index; }; }; template - T LuaInstance::Check(int index) + T LuaInstance::Check(unsigned int* index) { return LuaImplQueryArg(*this, index, TypeTag()); } template - T LuaInstance::Check(int index, T defValue) + T LuaInstance::Check(unsigned int* index, T defValue) { return LuaImplQueryArg(*this, index, defValue, TypeTag()); }