A bit more polish

This commit is contained in:
Justin van der Leij 2018-01-30 12:59:56 +01:00
parent 2d21fe97a5
commit d4297af78e
4 changed files with 43 additions and 35 deletions

View file

@ -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, {