Files
100DaysOfCode/day61/src/lib/lruCache.ts
2022-11-23 18:59:22 -06:00

35 lines
857 B
TypeScript

// retuhlessly stolen from @trunarla on twitter
export class LRUCache {
#cache: Map<string, string>;
#capacity: number;
constructor(capacity: number) {
this.#capacity = capacity;
this.#cache = new Map<string, string>();
}
set(key: string, value: string) {
// If we're at capacity, we need to delete the least-recently-used item:
if (this.#cache.size >= this.#capacity) {
// Manually invoke the keys iterator to get the least-recently-used key:
const keyToDelete = this.#cache.keys().next().value;
this.#cache.delete(keyToDelete);
}
this.#cache.delete(key);
this.#cache.set(key, value);
}
get(key: string) {
if (this.#cache.has(key)) {
const value = this.#cache.get(key);
if (!value) return;
this.#cache.delete(key);
this.#cache.set(key, value);
return value;
}
}
getCache() {
return this.#cache;
}
}