UNPKG

@thi.ng/ecs

Version:

Entity Component System based around typed arrays & sparse sets

61 lines (60 loc) 1.19 kB
import { DCons } from "@thi.ng/dcons/dcons"; class LRU { items; index; capacity; constructor(cap) { this.items = new DCons(); this.index = /* @__PURE__ */ new Map(); this.capacity = cap; } keys() { return this.index.keys(); } clear() { this.items.release(); this.index.clear(); } release() { this.clear(); return true; } set(key, val) { const { items, index } = this; let node = index.get(key); if (node) { node.value.v = val; items.asHead(node); } else { items.prepend({ k: key, v: val }); index.set(key, items.head); while (items.length > this.capacity) { this.index.delete(this.items.pop().k); } } return val; } get(key) { const node = this.index.get(key); if (node) { this.items.asHead(node); return node.value.v; } } getSet(key, notFound) { let val = this.get(key); return val !== void 0 ? val : this.set(key, notFound()); } delete(key) { const node = this.index.get(key); if (node) { this.index.delete(key); this.items.remove(node); return true; } return false; } } export { LRU };