local currentPath = (...):match('(.-)[^%./]+$') --- @class IUILib local iui = require(currentPath .. "iui") --- A type that stores an unordered collection of unique values. --- @class IUISet --- @field private storage table --- @field new fun(): IUISet Returns a new set. --- @field put fun(self: self, v: T) Inserts `v`, if not already present. --- @field putAll fun(self: self, s: IUISet) Inserts all members of `s`. --- @field remove fun(self: self, v: T) Removes `v`, if present. --- @field removeAll fun(self: self) Removes all values. --- @field has fun(self: self, v: T): boolean Returns whether the set has `v`. --- @field getCount fun(self: self): number Returns the number of values, in O(n) time. local Set = {} Set.__index = Set function Set.new() local out = { storage = {} } setmetatable(out, Set) return out end function Set:put(v) self.storage[v] = true end function Set:putAll(s) local storage = self.storage for k, _ in pairs(s.storage) do storage[k] = true end end function Set:remove(v) self.storage[v] = nil end function Set:removeAll() local storage = self.storage for k, _ in pairs(storage) do storage[k] = nil end end function Set:has(v) return self.storage[v] == true end function Set:getCount() local count = 0 for _ in pairs(self.storage) do count = count + 1 end return count end iui.set = Set