package lbms.plugins.mldht.indexer.utils;
import java.nio.ByteBuffer;
public class RotatingBloomFilter {
GenericBloomFilter current;
GenericBloomFilter previous;
int insertCount;
int targetSize;
boolean autorotate;
public RotatingBloomFilter(int targetSize, int bitCount) {
this.targetSize = targetSize;
current = new GenericBloomFilter(bitCount, targetSize);
previous = new GenericBloomFilter(bitCount, targetSize);
}
public void setAutoRotate(boolean val) {
autorotate = val;
}
public void insert(ByteBuffer data)
{
current.insert(data);
insertCount++;
if(autorotate && insertCount >= targetSize)
rotate();
}
public boolean contains(ByteBuffer data)
{
return current.probablyContains(data) || previous.probablyContains(data);
}
public void rotate() {
GenericBloomFilter toSwap = current;
current = previous;
current.clear();
previous = toSwap;
insertCount = 0;
}
}