@thermopylae/lib.cache
Version:
58 lines (57 loc) • 1.44 kB
JavaScript
class HashMapBucketList {
buckets;
constructor() {
this.buckets = new Map();
}
get numberOfBuckets() {
return this.buckets.size;
}
get size() {
let items = 0;
for (const bucket of this.buckets.values()) {
items += bucket.size;
}
return items;
}
add(bucketId, entry) {
let bucket = this.buckets.get(bucketId);
if (bucket == null) {
bucket = new Set();
this.buckets.set(bucketId, bucket);
}
bucket.add(entry);
}
has(bucketId, entry) {
const bucket = this.buckets.get(bucketId);
if (bucket == null) {
return false;
}
return bucket.has(entry);
}
move(fromBucketId, toBucketId, entry) {
this.remove(fromBucketId, entry);
this.add(toBucketId, entry);
}
remove(bucketId, entry) {
const bucket = this.buckets.get(bucketId);
if (bucket == null) {
return;
}
bucket.delete(entry);
if (bucket.size === 0) {
this.buckets.delete(bucketId);
}
}
clear() {
this.buckets.clear();
}
dropBucket(bucketId, cb) {
const bucket = this.buckets.get(bucketId);
if (bucket == null) {
return;
}
bucket.forEach(cb);
this.buckets.delete(bucketId);
}
}
export { HashMapBucketList };