diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-05-31 14:05:17 +0300 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2013-05-31 14:05:17 +0300 |
commit | 7afdb563b208459bb308c7ffc4f671ee23b0ca26 (patch) | |
tree | 05605c8744fff34d1061caab6ce15326032c456f /acf/model/node.lua | |
parent | 159c0cce532bd7517bf4cc8ff46d67f4fd38f2f6 (diff) | |
download | aconf-7afdb563b208459bb308c7ffc4f671ee23b0ca26.tar.bz2 aconf-7afdb563b208459bb308c7ffc4f671ee23b0ca26.tar.xz |
new data type: List
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') |