@thi.ng/ecs
Version:
Entity Component System based around typed arrays & sparse sets
61 lines (60 loc) • 1.19 kB
JavaScript
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
};