summaryrefslogtreecommitdiffstats
path: root/acf/model/node.lua
diff options
context:
space:
mode:
Diffstat (limited to 'acf/model/node.lua')
-rw-r--r--acf/model/node.lua31
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')