-
Notifications
You must be signed in to change notification settings - Fork 1
/
mizu.lua
38 lines (32 loc) · 823 Bytes
/
mizu.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
local Mizu = {}
function Mizu:init()
self.items = {}
self._itemIndexes = {}
self.count = 0
return self
end
function Mizu:add(item)
if self._itemIndexes[item] then
error('Already added ' .. tostring(item) .. ' to this Mizu pool.')
end
self.count = self.count + 1
self.items[self.count] = item
self._itemIndexes[item] = self.count
end
function Mizu:remove(item)
local id = self._itemIndexes[item]
local replacement = self.items[self.count]
self._itemIndexes[replacement] = id
self.items[id] = replacement
self._itemIndexes[item] = nil
self.items[self.count] = nil
self.count = self.count - 1
end
function Mizu:contains(item)
return self._itemIndexes[item] ~= nil
end
local MizuMetatable = {__index = Mizu}
return function()
return setmetatable({}, MizuMetatable)
:init()
end