From 79f6dcb171a719820464762aae7cd89ca2c25bc4 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 28 Jan 2025 13:03:38 +0300 Subject: [PATCH] use Bytearray in lua::pushvalue for byte arrays --- src/logic/scripting/lua/lua_custom_types.hpp | 1 + src/logic/scripting/lua/lua_util.cpp | 8 +------- src/logic/scripting/lua/usertypes/lua_type_bytearray.cpp | 3 +++ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/logic/scripting/lua/lua_custom_types.hpp b/src/logic/scripting/lua/lua_custom_types.hpp index 56a3c83c..de65a913 100644 --- a/src/logic/scripting/lua/lua_custom_types.hpp +++ b/src/logic/scripting/lua/lua_custom_types.hpp @@ -23,6 +23,7 @@ namespace lua { public: LuaBytearray(size_t capacity); LuaBytearray(std::vector buffer); + LuaBytearray(const ubyte* data, size_t size); virtual ~LuaBytearray(); const std::string& getTypeName() const override { diff --git a/src/logic/scripting/lua/lua_util.cpp b/src/logic/scripting/lua/lua_util.cpp index 23d13d7f..ce17c1d4 100644 --- a/src/logic/scripting/lua/lua_util.cpp +++ b/src/logic/scripting/lua/lua_util.cpp @@ -60,13 +60,7 @@ int lua::pushvalue(State* L, const dv::value& value) { break; case value_type::bytes: { const auto& bytes = value.asBytes(); - createtable(L, 0, bytes.size()); - size_t size = bytes.size(); - for (size_t i = 0; i < size;) { - pushinteger(L, bytes[i]); - i++; - rawseti(L, i); - } + newuserdata(L, bytes.data(), bytes.size()); break; } } diff --git a/src/logic/scripting/lua/usertypes/lua_type_bytearray.cpp b/src/logic/scripting/lua/usertypes/lua_type_bytearray.cpp index fc7ecf6f..41b4ee59 100644 --- a/src/logic/scripting/lua/usertypes/lua_type_bytearray.cpp +++ b/src/logic/scripting/lua/usertypes/lua_type_bytearray.cpp @@ -14,6 +14,9 @@ LuaBytearray::LuaBytearray(size_t capacity) : buffer(capacity) { LuaBytearray::LuaBytearray(std::vector buffer) : buffer(std::move(buffer)) { } +LuaBytearray::LuaBytearray(const ubyte* data, size_t size) : buffer(data, data + size) { +} + LuaBytearray::~LuaBytearray() { }