Lua bounded LRU cache with recency eviction
Lua
local function lru_cache(capacity)
assert(capacity >= 1, 'capacity must be positive')
local data, size, tick = {}, 0, 0
local function bump(e) tick = tick + 1; e.used = tick; return e.value end
local function get(key) local e = data[key]
if e then return bump(e) end
end
local function put(key, value) local e = data[key]
if e then e.value = value; bump(e); return end
if size == capacity then
local oldest = next(data)
for k, other in pairs(data) do
if other.used < data[oldest].used then oldest = k end
end
data[oldest] = nil; size = size - 1
end
size = size + 1; data[key] = { value = value, used = tick + 1 }; tick = tick + 1
end
return { get = get, put = put }
end
return lru_cache