feat: Lua-style array append support in Bytearray
This commit is contained in:
parent
303e861fbb
commit
d8feff56c0
8
dev/tests/bytearray.lua
Normal file
8
dev/tests/bytearray.lua
Normal 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
|
||||||
@ -32,21 +32,23 @@ local function count_elements(b)
|
|||||||
return elems
|
return elems
|
||||||
end
|
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 = {
|
local bytearray_methods = {
|
||||||
append=function(self, b)
|
append=append,
|
||||||
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,
|
|
||||||
insert=function(self, index, b)
|
insert=function(self, index, b)
|
||||||
local elems = count_elements(b)
|
local elems = count_elements(b)
|
||||||
if self.size + elems >= self.capacity then
|
if self.size + elems >= self.capacity then
|
||||||
@ -102,7 +104,9 @@ local bytearray_mt = {
|
|||||||
return self.bytes[key - 1]
|
return self.bytes[key - 1]
|
||||||
end,
|
end,
|
||||||
__newindex = function(self, key, value)
|
__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
|
return
|
||||||
end
|
end
|
||||||
self.bytes[key - 1] = value
|
self.bytes[key - 1] = value
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user