UNPKG

@thermopylae/lib.cache

Version:
58 lines (57 loc) 1.44 kB
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 };