package be.bagofwords.db.data; import be.bagofwords.db.bloomfilter.LongBloomFilter; public class ApproximateCountsFilter { private long[] averageValues; private LongCountsBloomFilter otherCountsBloomFilter; private LongBloomFilter oneCountsBloomFilter; public ApproximateCountsFilter(long[] averageValues, LongBloomFilter onceCountsBloomFilter, LongCountsBloomFilter otherCountsBloomFilter) { this.averageValues = averageValues; this.oneCountsBloomFilter = onceCountsBloomFilter; this.otherCountsBloomFilter = otherCountsBloomFilter; } public long getCount(long key) { int ind = otherCountsBloomFilter.getMaxCount(key); if (ind == 0) { if (oneCountsBloomFilter.mightContain(key)) { return 1; } else { return 0; } } else { return averageValues[ind - 1]; } } public long[] getAverageValues() { return averageValues; } public LongCountsBloomFilter getOtherCountsBloomFilter() { return otherCountsBloomFilter; } public LongBloomFilter getOneCountsBloomFilter() { return oneCountsBloomFilter; } //Serialization public ApproximateCountsFilter() { } public void setAverageValues(long[] averageValues) { this.averageValues = averageValues; } public void setOtherCountsBloomFilter(LongCountsBloomFilter otherCountsBloomFilter) { this.otherCountsBloomFilter = otherCountsBloomFilter; } public void setOneCountsBloomFilter(LongBloomFilter oneCountsBloomFilter) { this.oneCountsBloomFilter = oneCountsBloomFilter; } }