mirror of
https://github.com/Keyslam-Group/Concord.git
synced 2025-09-04 21:33:56 -04:00
Optimized Lists. Added pool.added and .removed. Added entity:ensure
This commit is contained in:
parent
e2b7af87fd
commit
11255fd722
7 changed files with 104 additions and 48 deletions
45
lib/list.lua
45
lib/list.lua
|
@ -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, {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue