--[[ Copyright (c) 2012-2013 Kaarle Ritvanen See LICENSE file for license details --]] local M = {} function M.setdefault(t, k, v) if t[k] == nil then t[k] = v end return t[k] end function M.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 M.setdefaults(dst, src) return M.update(dst, src, true) end function M.copy(var) return type(var) == 'table' and M.setdefaults({}, var) or var end function M.extend(dst, src) for _, v in ipairs(src) do table.insert(dst, v) end return dst end function M.keys(tbl) local res = {} for k, v in pairs(tbl) do table.insert(res, k) end return res end function M.map(func, tbl) local res = {} for k, v in pairs(tbl) do res[k] = func(v) end return res end return M