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.

62 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