109 lines
1.5 KiB
Lua
109 lines
1.5 KiB
Lua
local utils = {}
|
|
|
|
utils.sizeof = function(t)
|
|
if not t then
|
|
return 0
|
|
end
|
|
|
|
local size = 0
|
|
for k,v in pairs(t) do
|
|
size = size + 1
|
|
end
|
|
return size
|
|
end
|
|
|
|
utils.shallowDiff = function(a, b)
|
|
local counters = {}
|
|
|
|
for k,v in pairs(a) do
|
|
local currentCounter = counters[v] or 0
|
|
counters[v] = currentCounter + 1
|
|
end
|
|
|
|
for k,v in pairs(b) do
|
|
if counters[v] then
|
|
counters[v] = counters[v] - 1
|
|
end
|
|
end
|
|
|
|
local ret = {}
|
|
local n = 0
|
|
|
|
for k,v in pairs(a) do
|
|
if counters[v] and counters[v] > 0 then
|
|
counters[v] = counters[v] - 1
|
|
n = n + 1
|
|
ret[n] = v
|
|
end
|
|
end
|
|
|
|
return ret
|
|
end
|
|
|
|
utils.shallowClone = function(t)
|
|
if not t then
|
|
return t
|
|
end
|
|
|
|
local res = {}
|
|
for k,v in pairs(t) do
|
|
res[k] = v
|
|
end
|
|
|
|
return res
|
|
end
|
|
|
|
utils.merge = function(a, b)
|
|
local res = {}
|
|
|
|
for k, v in pairs(a) do
|
|
res[k] = v
|
|
end
|
|
|
|
for k, v in pairs(b) do
|
|
res[k] = v
|
|
end
|
|
|
|
return res
|
|
end
|
|
|
|
utils.concat = function(a, b)
|
|
local res = {}
|
|
local i = 0
|
|
|
|
for _, v in pairs(a) do
|
|
res[i] = v
|
|
i = i + 1
|
|
end
|
|
|
|
for _, v in pairs(b) do
|
|
res[i] = v
|
|
i = i + 1
|
|
end
|
|
|
|
return res
|
|
end
|
|
|
|
utils.find = function(t, predicate)
|
|
for k,v in pairs(t) do
|
|
if predicate(v, k) then
|
|
return v, k
|
|
end
|
|
end
|
|
end
|
|
|
|
-- repeat n times the given element x in a new table
|
|
utils.rep = function(x, n)
|
|
if n < 1 then
|
|
return {}
|
|
end
|
|
|
|
local result = {}
|
|
for i=1, n, 1 do
|
|
result[i] = x
|
|
end
|
|
|
|
return result
|
|
end
|
|
|
|
return utils |