Optimized Lists. Added pool.added and .removed. Added entity:ensure

This commit is contained in:
Justin van der Leij 2018-10-02 21:52:23 +02:00
parent e2b7af87fd
commit 11255fd722
7 changed files with 104 additions and 48 deletions

View file

@ -7,18 +7,21 @@ local mt = {__index = List}
-- @return A new list
function List.new()
return setmetatable({
objects = {},
pointers = {},
size = 0,
size = 0,
}, mt)
end
--- Clears the List completely.
-- @return self
function List:clear()
self.objects = {}
self.pointers = {}
self.size = 0
for i = 1, self.size do
local o = self[i]
self[o] = nil
self[i] = nil
end
self.size = 0
return self
end
@ -26,12 +29,12 @@ end
--- Adds an object to the List.
-- @param obj The object to add
-- @return self
function List:add(obj)
function List:add(obj) -- obj can not be a number and also not the string "size"
local size = self.size + 1
self.objects[size] = obj
self.pointers[obj] = size
self.size = size
self[size] = obj
self[obj] = size
self.size = size
return self
end
@ -40,22 +43,22 @@ end
-- @param obj The object to remove
-- @return self
function List:remove(obj)
local index = self.pointers[obj]
if not index then return end
local index = self[obj]
if not index then return end
local size = self.size
if index == size then
self.objects[size] = nil
self[size] = nil
else
local other = self.objects[size]
local other = self[size]
self.objects[index] = other
self.pointers[other] = index
self[index] = other
self[other] = index
self.objects[size] = nil
self[size] = nil
end
self.pointers[obj] = nil
self[obj] = nil
self.size = size - 1
end
@ -63,14 +66,14 @@ end
-- @param index The index to look at
-- @return The object at the index
function List:get(index)
return self.objects[index]
return self[index]
end
--- Gets if the List has the object.
-- @param obj The object to search for
-- true if the list has the object, false otherwise
function List:has(obj)
return self.pointers[obj] and true
return self[obj] and true
end
return setmetatable(List, {