--[[ Copyright (c) 2012 Kaarle Ritvanen See LICENSE file for license details --]] module(..., package.seeall) local object = require('acf.object') local super = object.super local pth = require('acf.path') local util = require('acf.util') DataStore = object.class(require('acf.transaction.backend').TransactionBackend) function DataStore:init() super(self, DataStore):init() self.backends = util.map(function(m) return m.backend() end, util.loadmods('persistence/backends')) end function DataStore:split_path(path) local comps = pth.split(path) local backend = self.backends[comps[1]] assert(backend) table.remove(comps, 1) return backend, comps end function DataStore:get(path) local backend, comps = self:split_path(path) return util.copy(backend:get(comps)), self.mod_time[path] or 0 end function DataStore:set_multiple(mods) super(self, DataStore):set_multiple(mods) local bms = {} for _, mod in ipairs(mods) do local path, t, value = unpack(mod) local backend, comps = self:split_path(path) if not bms[backend] then bms[backend] = {} end table.insert(bms[backend], {comps, t, value}) end for backend, bm in pairs(bms) do backend:set(bm) end end