diff --git a/SDK/src/NDK/LuaAPI_Audio.cpp b/SDK/src/NDK/LuaAPI_Audio.cpp index 2865b956a..c334b0454 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; diff --git a/SDK/src/NDK/LuaAPI_Core.cpp b/SDK/src/NDK/LuaAPI_Core.cpp index ae2172988..49cce49fd 100644 --- a/SDK/src/NDK/LuaAPI_Core.cpp +++ b/SDK/src/NDK/LuaAPI_Core.cpp @@ -94,7 +94,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 << ')'; @@ -162,8 +162,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* { @@ -288,26 +333,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()) @@ -319,7 +344,6 @@ namespace Ndk return 1; }); - fileClass.Register(instance); // Énumérations de la classe Nz::File 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 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()); }