You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.2 KiB
61 lines
1.2 KiB
---@class DBMCoreNamespace
|
|
local private = select(2, ...)
|
|
|
|
---@class TableUtils
|
|
local tableUtils = private:GetPrototype("TableUtils")
|
|
|
|
local ipairs, tremove = ipairs, table.remove
|
|
|
|
-- Checks if a given value is in an array.
|
|
---@return boolean found
|
|
function tableUtils.checkEntry(t, val)
|
|
for _, v in ipairs(t) do
|
|
if v == val then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function tableUtils.removeEntry(t, val)
|
|
local existed = false
|
|
for i = #t, 1, -1 do
|
|
if t[i] == val then
|
|
tremove(t, i)
|
|
existed = true
|
|
end
|
|
end
|
|
return existed
|
|
end
|
|
|
|
function tableUtils.orderedTable()
|
|
local nextkey, firstkey = {}, {}
|
|
nextkey[nextkey] = firstkey
|
|
|
|
local function onext(self, key)
|
|
while key ~= nil do
|
|
key = nextkey[key]
|
|
local val = self[key]
|
|
if val ~= nil then
|
|
return key, val
|
|
end
|
|
end
|
|
end
|
|
|
|
local selfmeta = firstkey
|
|
selfmeta.__nextkey = nextkey
|
|
|
|
function selfmeta:__newindex(key, val)
|
|
rawset(self, key, val)
|
|
if nextkey[key] == nil then
|
|
nextkey[nextkey[nextkey]] = key
|
|
nextkey[nextkey] = key
|
|
end
|
|
end
|
|
|
|
function selfmeta:__pairs()
|
|
return onext, self, firstkey
|
|
end
|
|
|
|
return setmetatable({}, selfmeta)
|
|
end
|
|
|