diff options
Diffstat (limited to 'acf/model/set.lua')
-rw-r--r-- | acf/model/set.lua | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/acf/model/set.lua b/acf/model/set.lua index 2ab9d6d..47eeaa8 100644 --- a/acf/model/set.lua +++ b/acf/model/set.lua @@ -10,40 +10,30 @@ local npairs = require('acf.model.node').pairs local object = require('acf.object') -local function find(set, value) - for i, member in npairs(set) do - if member == value then return i end - end -end - - -Set = object.class(require('acf.model.node').Collection) +Set = object.class(require('acf.model.node').List) function Set:init(context, params) assert(not object.isinstance(params.field, TreeNode)) object.super(self, Set):init(context, params) + local function find(value) + for i, member in npairs(self) do + if member == value then return i end + end + end + local mt = getmetatable(self) mt.meta.type = 'set' - function mt.get(k, create) return (create or find(self, k)) and k end + function mt.get(k, create) return (create or find(k)) and k end function mt.__newindex(t, k, v) assert(v == nil) - local i = find(self, k) + local i = find(k) if not i then return end - - local len = #mt.members() - while i < len do - mt.save(i, mt.load(i + 1)) - i = i + 1 - end - mt.save(len, nil) + mt.save(i, nil) end -end - -function add(set, value) - local mt = getmetatable(set) - if not find(set, value) then mt.save(#mt.members() + 1, value) end + local insert = mt.insert + function mt.insert(v) if not find(v) then insert(v) end end end |