Files
2026-06-22 18:44:52 +00:00

30 lines
611 B
Elixir

defmodule Chesstrainer.Cache.Evict do
@moduledoc """
Eviction functions for LRU cache
"""
# O(n) time, not efficient
def maybe_evict_oldest(table, max_size) do
if :ets.info(table, :size) > max_size do
case find_oldest_entry(table) do
{oldest_key, _} -> :ets.delete(table, oldest_key)
_ -> :ok
end
end
end
defp find_oldest_entry(table) do
:ets.foldl(
fn {k, _v, t}, acc ->
case acc do
nil -> {k, t}
{_, oldest_t} when t < oldest_t -> {k, t}
_ -> acc
end
end,
nil,
table
)
end
end