Server authority
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user