--[[ Copyright (c) 2012-2013 Kaarle Ritvanen See LICENSE file for license details --]] module(..., package.seeall) local TreeNode = require('acf.model.field').TreeNode 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) function Set:init(context, params) assert(not object.isinstance(params.field, TreeNode)) object.super(self, Set):init(context, params) local mt = getmetatable(self) mt.meta.type = 'set' function mt.__index(t, k) return find(self, k) and k end function mt.__newindex(t, k, v) assert(v == nil) local i = find(self, k) if not i then return end local len = #mt.members() while i < len do mt.set(i, mt.get(i + 1)) i = i + 1 end mt.set(len, nil) end end function add(set, value) local mt = getmetatable(set) if not find(set, value) then mt.set(#mt.members() + 1, value) end end