add memoize util

This commit is contained in:
BuckarooBanzay 2022-11-14 15:32:23 +01:00
parent 38b0767048
commit a0187786c5
2 changed files with 25 additions and 0 deletions

View File

@ -8,6 +8,7 @@ building_lib = {
}
local MP = minetest.get_modpath("building_lib")
dofile(MP .. "/memoize.lua")
dofile(MP .. "/entity.lua")
dofile(MP .. "/preview.lua")
dofile(MP .. "/api.lua")

24
memoize.lua Normal file
View File

@ -0,0 +1,24 @@
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)