Files
bworld/server/game/lru.ts
T
2026-09-24 19:34:07 -03:00

36 lines
731 B
TypeScript

// a Map that forgets the least recently used entries past max_size
export class LruMap<K, V> {
#map = new Map<K, V>();
readonly max_size: number;
constructor(max_size: number) {
this.max_size = max_size;
}
get(key: K): V | undefined {
const value = this.#map.get(key);
if (value !== undefined) {
// maps keep insertion order, so re-inserting moves it to the back
this.#map.delete(key);
this.#map.set(key, value);
}
return value;
}
set(key: K, value: V) {
this.#map.delete(key);
this.#map.set(key, value);
if (this.#map.size > this.max_size) {
this.#map.delete(this.#map.keys().next().value!);
}
}
delete(key: K) {
this.#map.delete(key);
}
get size() {
return this.#map.size;
}
}