--[[ Copyright (c) 2012-2013 Kaarle Ritvanen See LICENSE file for license details --]] module(..., package.seeall) function setdefault(t, k, v) if t[k] == nil then t[k] = v end return t[k] end function update(dst, src, preserve) for k, v in pairs(src) do if not preserve or dst[k] == nil then dst[k] = v end end return dst end function setdefaults(dst, src) return update(dst, src, true) end function copy(var) return type(var) == 'table' and setdefaults({}, var) or var end function map(func, tbl) local res = {} for k, v in pairs(tbl) do res[k] = func(copy(v)) end return res end