UNPKG

@thermopylae/lib.cache

Version:
43 lines (42 loc) 1.29 kB
import { DoublyLinkedList } from "../../data-structures/list/doubly-linked.js"; import { createException } from "../../error.js"; class LRUEvictionPolicy { cacheMaxCapacity; cacheBackendElementsCount; deleteFromCache; usageRecency; constructor(cacheMaxCapacity, cacheBackendElementsCount) { if (cacheMaxCapacity <= 0) { throw createException("INVALID_CACHE_MAX_CAPACITY" , `Capacity needs to be greater than 0. Given: ${cacheMaxCapacity}.`); } this.cacheMaxCapacity = cacheMaxCapacity; this.cacheBackendElementsCount = cacheBackendElementsCount; this.usageRecency = new DoublyLinkedList(); } onHit(entry) { this.usageRecency.toFront(entry); return 1 ; } onMiss() { return undefined; } onSet(entry) { if (this.cacheBackendElementsCount.size > this.cacheMaxCapacity) { this.deleteFromCache(this.usageRecency.tail); } this.usageRecency.unshift(entry); } onUpdate() { return undefined; } onDelete(entry) { this.usageRecency.remove(entry); } onClear() { this.usageRecency.clear(); } setDeleter(deleter) { this.deleteFromCache = deleter; } } export { LRUEvictionPolicy };