diff options
Diffstat (limited to 'acf/model/node.lua')
-rw-r--r-- | acf/model/node.lua | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/acf/model/node.lua b/acf/model/node.lua index 6546bdc..a58124d 100644 --- a/acf/model/node.lua +++ b/acf/model/node.lua @@ -147,6 +147,36 @@ function Collection:init(context, params) end +List = class(Collection) + +function List:init(context, params) + super(self, List):init(context, params) + + local mt = getmetatable(self) + mt.meta.type = 'list' + + local save = mt.save + function mt.save(k, v) + assert(type(k) == 'number') + if v == nil then + local len = #mt.members() + while k < len do + mt.save(k, mt.load(k + 1)) + k = k + 1 + end + end + save(k, v) + end + + function mt.insert(v, i) + local len = #mt.members() + if not i then i = len + 1 end + for j = len,i,-1 do mt.save(j + 1, mt.load(j)) end + mt.save(i, v) + end +end + + -- experimental Mixed = class(Collection) @@ -172,6 +202,7 @@ end addr = meta_func('addr') has_permission = meta_func('has_permission') +insert = meta_func('insert') members = meta_func('members') meta = meta_func('meta') mmeta = meta_func('mmeta') |