mirror of
https://github.com/Keyslam-Group/Concord.git
synced 2025-09-02 20:33:54 -04:00
A bit more polish
This commit is contained in:
parent
2d21fe97a5
commit
d4297af78e
4 changed files with 43 additions and 35 deletions
|
@ -3,48 +3,52 @@ local mt = {__index = List}
|
|||
|
||||
function List.new()
|
||||
return setmetatable({
|
||||
numerical = {},
|
||||
named = {},
|
||||
size = 0,
|
||||
objects = {},
|
||||
pointers = {},
|
||||
size = 0,
|
||||
}, mt)
|
||||
end
|
||||
|
||||
function List:clear()
|
||||
self.numerical = {}
|
||||
self.named = {}
|
||||
self.size = 0
|
||||
self.objects = {}
|
||||
self.pointers = {}
|
||||
self.size = 0
|
||||
end
|
||||
|
||||
function List:add(obj)
|
||||
local size = self.size + 1
|
||||
|
||||
self.numerical[size] = obj
|
||||
self.named[obj] = size
|
||||
self.size = size
|
||||
self.objects[size] = obj
|
||||
self.pointers[obj] = size
|
||||
self.size = size
|
||||
end
|
||||
|
||||
function List:remove(obj)
|
||||
local index = self.named[obj]
|
||||
local index = self.pointers[obj]
|
||||
local size = self.size
|
||||
|
||||
if index == size then
|
||||
self.numerical[size] = nil
|
||||
self.objects[size] = nil
|
||||
else
|
||||
local other = self.numerical[size]
|
||||
local other = self.objects[size]
|
||||
|
||||
self.numerical[index] = other
|
||||
self.named[other] = index
|
||||
self.objects[index] = other
|
||||
self.pointers[other] = index
|
||||
|
||||
self.numerical[size] = nil
|
||||
self.objects[size] = nil
|
||||
end
|
||||
|
||||
|
||||
self.named[obj] = nil
|
||||
self.pointers[obj] = nil
|
||||
self.size = size - 1
|
||||
end
|
||||
|
||||
function List:get(index)
|
||||
return self.objects[index]
|
||||
end
|
||||
|
||||
function List:has(obj)
|
||||
return self.named[obj] and true
|
||||
return self.pointers[obj] and true
|
||||
end
|
||||
|
||||
return setmetatable(List, {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue