add Bytearray.trim, Bytearray.get_capacity
This commit is contained in:
parent
1ade910fa1
commit
0a49e4fa92
@ -22,3 +22,6 @@ assert(#arr == 13)
|
|||||||
for i=1,10 do
|
for i=1,10 do
|
||||||
assert(arr[i] == 10 - i)
|
assert(arr[i] == 10 - i)
|
||||||
end
|
end
|
||||||
|
print(#arr, arr:get_capacity())
|
||||||
|
arr:trim()
|
||||||
|
assert(#arr == arr:get_capacity())
|
||||||
|
|||||||
@ -24,6 +24,18 @@ local function grow_buffer(self, elems)
|
|||||||
free(prev)
|
free(prev)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function trim_buffer(self)
|
||||||
|
if self.size == self.capacity then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local size = self.size
|
||||||
|
local prev = self.bytes
|
||||||
|
self.bytes = malloc(size)
|
||||||
|
FFI.copy(self.bytes, prev, self.size)
|
||||||
|
self.capacity = size
|
||||||
|
free(prev)
|
||||||
|
end
|
||||||
|
|
||||||
local function count_elements(b)
|
local function count_elements(b)
|
||||||
local elems = 1
|
local elems = 1
|
||||||
if _type(b) ~= "number" then
|
if _type(b) ~= "number" then
|
||||||
@ -88,23 +100,33 @@ local function remove(self, index, elems)
|
|||||||
self.size = self.size - elems
|
self.size = self.size - elems
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function clear(self)
|
||||||
|
self.size = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
local function reserve(self, new_capacity)
|
||||||
|
if new_capacity <= self.capacity then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local prev = self.bytes
|
||||||
|
self.bytes = malloc(new_capacity)
|
||||||
|
FFI.copy(self.bytes, prev, self.size)
|
||||||
|
self.capacity = new_capacity
|
||||||
|
free(prev)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function get_capacity(self)
|
||||||
|
return self.capacity
|
||||||
|
end
|
||||||
|
|
||||||
local bytearray_methods = {
|
local bytearray_methods = {
|
||||||
append=append,
|
append=append,
|
||||||
insert=insert,
|
insert=insert,
|
||||||
remove=remove,
|
remove=remove,
|
||||||
clear=function(self)
|
trim=trim_buffer,
|
||||||
self.size = 0
|
clear=clear,
|
||||||
end,
|
reserve=reserve,
|
||||||
reserve=function(self, new_capacity)
|
get_capacity=get_capacity,
|
||||||
if new_capacity <= self.capacity then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local prev = self.bytes
|
|
||||||
self.bytes = malloc(new_capacity)
|
|
||||||
FFI.copy(self.bytes, prev, self.size)
|
|
||||||
self.capacity = new_capacity
|
|
||||||
free(prev)
|
|
||||||
end,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
local bytearray_mt = {
|
local bytearray_mt = {
|
||||||
@ -172,6 +194,10 @@ local FFIBytearray = {
|
|||||||
append = append,
|
append = append,
|
||||||
insert = insert,
|
insert = insert,
|
||||||
remove = remove,
|
remove = remove,
|
||||||
|
trim = trim_buffer,
|
||||||
|
clear = clear,
|
||||||
|
reserve = reserve,
|
||||||
|
get_capacity = get_capacity,
|
||||||
}
|
}
|
||||||
|
|
||||||
local function FFIBytearray_as_string(bytes)
|
local function FFIBytearray_as_string(bytes)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user