--[[ Copyright (c) 2012-2013 Kaarle Ritvanen See LICENSE file for license details --]] module(..., package.seeall) local copy = require('acf.util').copy local function keys(tbl) local res = {} for k, v in pairs(tbl) do table.insert(res, k) end return res end backend = require('acf.object').class() function backend:init(data) self.data = data or {} end function backend:_get(path) local res = self.data for _, comp in ipairs(path) do if res == nil then return end assert(type(res) == 'table') res = res[comp] end return res end function backend:get(path, tpe) local res = self:_get(path) return type(res) == 'table' and keys(res) or res end function backend:_set(path, tpe, value) if tpe == 'table' then value = {} end if #path == 0 then self.data = value else local comps = copy(path) local name = comps[#comps] table.remove(comps) self:_get(comps)[name] = value end end function backend:set(mods) for _, mod in ipairs(mods) do self:_set(unpack(mod)) end end