---@class QuarrelTable local qtable = {} --- Map a function on each element in the table ---@param t table ---@generic T ---@param f fun(v: T): T ---@return table function qtable.map(t, f) local nt = {} for k, v in pairs(t) do nt[k] = f(v) end return nt end --- Filter a table with a function ---@param t table ---@param f fun(v: any): boolean ---@param dict boolean Whether the supplied table is a dictionary ---@return table function qtable.filter(t, f, dict) local nt = {} for k, v in pairs(t) do if not f(v) then goto continue end if dict then nt[k] = v else table.insert(nt, v) end ::continue:: end return nt end -- This is taken from http://lua-users.org/wiki/SortedIteration -- This version is stripped of comments and empty lines + some stuff is renamed local function __gen_oindex(t) local oindex = {} for key in pairs(t) do table.insert(oindex, key) end table.sort(oindex) return oindex end function qtable.onext(t, state) local key = nil if state == nil then t.__oindex = __gen_oindex(t) key = t.__oindex[1] else for i = 1, #t.__oindex do if t.__oindex[i] == state then key = t.__oindex[i + 1] end end end if key then return key, t[key] end t.__oindex = nil end function qtable.opairs(t) return qtable.onext, t, nil end return qtable