From 14f4291c7c448d11c3064341012dd0b82187f007 Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 21 Jan 2016 13:05:43 +0100 Subject: [PATCH 1/4] Lua/LuaClass: Fix arguments for methods Former-commit-id: fc3ec0b3f47185edb74abe1eb54af8722844a6f5 --- include/Nazara/Lua/LuaClass.inl | 1 + 1 file changed, 1 insertion(+) diff --git a/include/Nazara/Lua/LuaClass.inl b/include/Nazara/Lua/LuaClass.inl index ea86b6f1a..b2bbdbc3e 100644 --- a/include/Nazara/Lua/LuaClass.inl +++ b/include/Nazara/Lua/LuaClass.inl @@ -405,6 +405,7 @@ namespace Nz if (it != info->instanceGetters.end()) instance = it->second(lua); } + lua.Pop(2); } lua.Remove(1); //< Remove the instance from the Lua stack From 9d210eb2ff01773674707e8bee7f0537b51b50b4 Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 21 Jan 2016 13:06:44 +0100 Subject: [PATCH 2/4] Lua/LuaInstance: Cleanup Former-commit-id: 031e810caf968700d5bd8b2c51698f110c6559af --- include/Nazara/Lua/LuaInstance.inl | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/include/Nazara/Lua/LuaInstance.inl b/include/Nazara/Lua/LuaInstance.inl index 1ce27b48c..77155cba0 100644 --- a/include/Nazara/Lua/LuaInstance.inl +++ b/include/Nazara/Lua/LuaInstance.inl @@ -45,18 +45,14 @@ namespace Nz std::enable_if_t::value, unsigned int> LuaImplQueryArg(const LuaInstance& instance, int index, T* arg, TypeTag) { using UnderlyingT = std::underlying_type_t; - *arg = static_cast(LuaImplQueryArg(instance, index, reinterpret_cast(arg), TypeTag())); - - return 1; + return LuaImplQueryArg(instance, index, reinterpret_cast(arg), TypeTag()); } template std::enable_if_t::value, unsigned int> LuaImplQueryArg(const LuaInstance& instance, int index, T* arg, T defValue, TypeTag) { using UnderlyingT = std::underlying_type_t; - *arg = static_cast(LuaImplQueryArg(instance, index, reinterpret_cast(arg), static_cast(defValue), TypeTag())); - - return 1; + return LuaImplQueryArg(instance, index, reinterpret_cast(arg), static_cast(defValue), TypeTag()); } template @@ -98,7 +94,6 @@ namespace Nz std::enable_if_t::value, unsigned int> LuaImplQueryArg(const LuaInstance& instance, int index, T* arg, T defValue, TypeTag) { using SignedT = std::make_signed_t; - return LuaImplQueryArg(instance, index, reinterpret_cast(arg), static_cast(defValue), TypeTag()); } @@ -149,7 +144,6 @@ namespace Nz std::enable_if_t::value, int> LuaImplReplyVal(const LuaInstance& instance, T val, TypeTag) { using EnumT = typename std::underlying_type::type; - return LuaImplReplyVal(instance, static_cast(val), TypeTag()); } From 642f139da97bc42f93b65fccf233306193da9630 Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 21 Jan 2016 13:07:05 +0100 Subject: [PATCH 3/4] Sdk/LuaAPI: Improve error check Former-commit-id: 5c33dd47c3da1c5957704272405dcd6c26117c0f --- SDK/src/NDK/LuaAPI_Audio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SDK/src/NDK/LuaAPI_Audio.cpp b/SDK/src/NDK/LuaAPI_Audio.cpp index 07bb9bdec..12f9192a8 100644 --- a/SDK/src/NDK/LuaAPI_Audio.cpp +++ b/SDK/src/NDK/LuaAPI_Audio.cpp @@ -35,7 +35,7 @@ namespace Ndk std::size_t bufferSize = 0; const char* buffer = lua.CheckString(index, &bufferSize); - NazaraAssert(buffer && bufferSize < sampleCount * sizeof(Nz::Int16), "Invalid buffer"); + lua.ArgCheck(buffer && bufferSize < sampleCount * sizeof(Nz::Int16), index, "Invalid buffer"); lua.PushBoolean(instance->Create(format, sampleCount, sampleRate, reinterpret_cast(buffer))); return 1; From 1ef85ae8061715767261bb5814dc998f1677c584 Mon Sep 17 00:00:00 2001 From: Lynix Date: Thu, 21 Jan 2016 13:07:37 +0100 Subject: [PATCH 4/4] Sdk/LuAPI: Bind Nz::Stream class Former-commit-id: 286ecbd79b25b30d17055640e1c792906f434525 --- SDK/src/NDK/LuaAPI_Core.cpp | 68 +++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 22 deletions(-) diff --git a/SDK/src/NDK/LuaAPI_Core.cpp b/SDK/src/NDK/LuaAPI_Core.cpp index 8e626494a..16d7c9b3c 100644 --- a/SDK/src/NDK/LuaAPI_Core.cpp +++ b/SDK/src/NDK/LuaAPI_Core.cpp @@ -29,7 +29,7 @@ namespace Ndk clockClass.SetMethod("__tostring", [] (Nz::LuaInstance& lua, Nz::Clock& clock) -> int { Nz::StringStream stream("Clock(Elapsed: "); stream << clock.GetSeconds(); - stream << ", Paused: "; + stream << "s, Paused: "; stream << clock.IsPaused(); stream << ')'; @@ -97,8 +97,53 @@ namespace Ndk directoryClass.Register(instance); + /*********************************** Nz::Stream ***********************************/ + Nz::LuaClass streamClass("Stream"); + + streamClass.SetMethod("EnableTextMode", &Nz::Stream::EnableTextMode); + streamClass.SetMethod("Flush", &Nz::Stream::Flush); + streamClass.SetMethod("GetCursorPos", &Nz::Stream::GetCursorPos); + streamClass.SetMethod("GetDirectory", &Nz::Stream::GetDirectory); + streamClass.SetMethod("GetPath", &Nz::Stream::GetPath); + streamClass.SetMethod("GetOpenMode", &Nz::Stream::GetOpenMode); + streamClass.SetMethod("GetStreamOptions", &Nz::Stream::GetStreamOptions); + streamClass.SetMethod("GetSize", &Nz::Stream::GetSize); + streamClass.SetMethod("ReadLine", &Nz::Stream::ReadLine, 0U); + streamClass.SetMethod("IsReadable", &Nz::Stream::IsReadable); + streamClass.SetMethod("IsSequential", &Nz::Stream::IsSequential); + streamClass.SetMethod("IsTextModeEnabled", &Nz::Stream::IsTextModeEnabled); + streamClass.SetMethod("IsWritable", &Nz::Stream::IsWritable); + streamClass.SetMethod("SetCursorPos", &Nz::Stream::SetCursorPos); + + streamClass.SetMethod("Read", [] (Nz::LuaInstance& lua, Nz::Stream& stream) -> int { + int length = lua.CheckInteger(1); + lua.ArgCheck(length > 0, 1, "length must be positive"); + + std::unique_ptr buffer(new char[length]); + std::size_t readLength = stream.Read(buffer.get(), length); + + lua.PushString(Nz::String(buffer.get(), readLength)); + return 1; + }); + + streamClass.SetMethod("Write", [] (Nz::LuaInstance& lua, Nz::Stream& stream) -> int { + int index = 1; + + std::size_t bufferSize = 0; + const char* buffer = lua.CheckString(index, &bufferSize); + + if (stream.IsTextModeEnabled()) + lua.Push(stream.Write(Nz::String(buffer, bufferSize))); + else + lua.Push(stream.Write(buffer, bufferSize)); + return 1; + }); + + streamClass.Register(instance); + /*********************************** Nz::File ***********************************/ Nz::LuaClass fileClass("File"); + fileClass.Inherit(streamClass); // Constructeur fileClass.SetConstructor([](Nz::LuaInstance& lua) -> Nz::File* { @@ -223,26 +268,6 @@ namespace Ndk return 0; }); - // Nz::File::Read (Manual) - fileClass.SetMethod("Read", [] (Nz::LuaInstance& lua, Nz::File& file) -> int { - int length = lua.CheckInteger(1); - lua.ArgCheck(length > 0, 1, "length must be positive"); - - std::unique_ptr buffer(new char[length]); - std::size_t readLength = file.Read(buffer.get(), length); - - lua.PushString(Nz::String(buffer.get(), readLength)); - return 1; - }); - - // Nz::File::ReadLine (Manual) - fileClass.SetMethod("ReadLine", [] (Nz::LuaInstance& lua, Nz::File& file) -> int { - int length = lua.CheckInteger(1, 0); - lua.PushString(file.ReadLine(length)); - return 1; - }); - - // Nz::File::__tostring (Manual) fileClass.SetMethod("__tostring", [] (Nz::LuaInstance& lua, Nz::File& file) -> int { Nz::StringStream stream("File("); if (file.IsOpen()) @@ -254,7 +279,6 @@ namespace Ndk return 1; }); - fileClass.Register(instance); // Énumérations de la classe Nz::File