Use `table.move` to implement `common.splice` (#1324)

* Use `table.move` to implement `common.splice`

* Disallow negative `remove` in `common.splice`
This commit is contained in:
xwii 2023-01-14 01:33:13 +07:00 committed by George Sokianos
parent 75b6173dc9
commit e4c5fceaf9
1 changed files with 4 additions and 15 deletions

View File

@ -82,25 +82,14 @@ end
function common.splice(t, at, remove, insert)
assert(remove >= 0, "bad argument #3 to 'splice' (non-negative value expected)")
insert = insert or {}
local offset = #insert - remove
local old_len = #t
if offset < 0 then
for i = at - offset, old_len - offset do
t[i + offset] = t[i]
end
elseif offset > 0 then
for i = old_len, at, -1 do
t[i + offset] = t[i]
end
end
for i, item in ipairs(insert) do
t[at + i - 1] = item
end
local len = #insert
if remove ~= len then table.move(t, at + remove, #t + remove, at + len) end
table.move(insert, 1, len, at, t)
end
local function compare_score(a, b)
return a.score > b.score
end