mirror of https://gitea.it/1414codeforge/gear
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
858 B
Lua
39 lines
858 B
Lua
2 years ago
|
--- Functions dealing with metatables and tables merging.
|
||
|
--
|
||
|
-- @module gear.meta
|
||
|
-- @copyright 2022 The DoubleFourteen Code Forge
|
||
|
-- @author Lorenzo Cogotti
|
||
|
|
||
|
local meta = {}
|
||
|
|
||
|
|
||
|
--- Test whether 'obj' is an instance of a given class 'cls'.
|
||
|
function meta.isinstance(obj, cls)
|
||
|
repeat
|
||
|
local m = getmetatable(obj)
|
||
|
if m == cls then return true end
|
||
|
|
||
|
obj = m
|
||
|
until obj == nil
|
||
|
|
||
|
return false
|
||
|
end
|
||
|
|
||
|
--- Merge table 'from' into table 'to'.
|
||
|
--
|
||
|
-- For every field in 'from', copy it to destination
|
||
|
-- table 'to', whenever the same field is nil in that table.
|
||
|
--
|
||
|
-- The same process is applied recursively to sub-tables.
|
||
|
function meta.mergetable(to, from)
|
||
|
for k,v in pairs(from) do
|
||
|
if to[k] == nil then
|
||
|
to[k] = type(v) == 'table' and meta.mergetable({}, v) or v
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return to
|
||
|
end
|
||
|
|
||
|
return meta
|