xurfer/src/lovr/lib/iui/pool.lua

55 lines
1 KiB
Lua
Raw Normal View History

2026-06-06 12:35:31 +02:00
local currentPath = (...):match('(.-)[^%./]+$')
--- @class IUILib
local iui = require(currentPath .. "iui")
--- @class IUIPool
local pool = {}
--- @class (exact) IUIPoolStack
--- @field top number
--- @field items any[]
--- @type table<string, IUIPoolStack>
local entries = {}
--- @param typename string
--- @return IUIPoolStack
local function getPool(typename)
local out = entries[typename]
if not out then
out = { top = 0, items = {} }
entries[typename] = out
end
return out
end
--- @generic T
--- @param typename string
--- @return T object
function pool.get(typename)
local stack = getPool(typename)
if stack.top == 0 then
return {
_typename = typename
}
else
local value = stack.items[stack.top]
stack.top = stack.top - 1
return value
end
end
--- @generic T
--- @param obj T
function pool.put(obj)
local stack = getPool(obj["_typename"])
stack.top = stack.top + 1
stack.items[stack.top] = obj
end
iui.pool = pool