UNPKG

adaptive-bloom-filter

Version:

Fast, memory-efficient bloom filter with adaptive compression and async operations for JavaScript

61 lines (51 loc) 1.67 kB
/** * Memory Pool Module * Provides efficient filter reuse and memory management */ class BloomFilterPool { constructor(poolSize = 10) { this.poolSize = poolSize; this.availableFilters = []; this.usedFilters = new Set(); } createFilter(expectedItems, falsePositiveRate, options = {}) { const reusableFilter = this.availableFilters.find(filter => filter.expectedItems >= expectedItems && filter.falsePositiveRate <= falsePositiveRate ); if (reusableFilter) { this.availableFilters.splice(this.availableFilters.indexOf(reusableFilter), 1); reusableFilter.reset(); this.usedFilters.add(reusableFilter); return reusableFilter; } if (this.usedFilters.size < this.poolSize) { const AdaptiveBloomFilter = require('../core/bloom-filter'); const newFilter = new AdaptiveBloomFilter(expectedItems, falsePositiveRate, options); this.usedFilters.add(newFilter); return newFilter; } const AdaptiveBloomFilter = require('../core/bloom-filter'); return new AdaptiveBloomFilter(expectedItems, falsePositiveRate, options); } releaseFilter(filter) { if (this.usedFilters.has(filter)) { this.usedFilters.delete(filter); filter.reset(); this.availableFilters.push(filter); } } getPoolStats() { return { poolSize: this.poolSize, available: this.availableFilters.length, used: this.usedFilters.size, memoryEfficiency: (this.availableFilters.length / this.poolSize) * 100 }; } clear() { this.availableFilters.length = 0; this.usedFilters.clear(); } } module.exports = BloomFilterPool;