building_lib/memoize.lua
2022-11-14 15:32:23 +01:00

24 lines
452 B
Lua

local cache = {}
function building_lib.memoize(fn, keyfn)
return function(...)
local key = keyfn(...)
if not cache[key] then
cache[key] = { fn(...) }
end
return unpack(cache[key])
end
end
function building_lib.memoize_invalidate(key)
cache[key] = nil
end
-- periodic cleanup
local function purge_cache()
cache = {}
minetest.after(300, purge_cache)
end
minetest.after(10, purge_cache)