feat: Lua-style array append support in Bytearray

This commit is contained in:
MihailRis 2025-04-12 12:32:31 +03:00
parent 303e861fbb
commit d8feff56c0
2 changed files with 27 additions and 15 deletions

8
dev/tests/bytearray.lua Normal file
View File

@ -0,0 +1,8 @@
local arr = Bytearray()
assert(#arr == 0)
for i=1,10 do
arr[i] = 10 - i
assert(#arr == i)
assert(arr[i] == 10 - i)
end

View File

@ -32,21 +32,23 @@ local function count_elements(b)
return elems
end
local function append(self, b)
local elems = count_elements(b)
if self.size + elems > self.capacity then
grow_buffer(self, elems)
end
if _type(b) == "number" then
self.bytes[self.size] = b
else
for i=1, #b do
self.bytes[self.size + i - 1] = b[i]
end
end
self.size = self.size + elems
end
local bytearray_methods = {
append=function(self, b)
local elems = count_elements(b)
if self.size + elems > self.capacity then
grow_buffer(self, elems)
end
if _type(b) == "number" then
self.bytes[self.size] = b
else
for i=1, #b do
self.bytes[self.size + i - 1] = b[i]
end
end
self.size = self.size + elems
end,
append=append,
insert=function(self, index, b)
local elems = count_elements(b)
if self.size + elems >= self.capacity then
@ -102,7 +104,9 @@ local bytearray_mt = {
return self.bytes[key - 1]
end,
__newindex = function(self, key, value)
if key <= 0 or key > self.size then
if key == self.size + 1 then
return append(self, value)
elseif key <= 0 or key > self.size then
return
end
self.bytes[key - 1] = value