package com.cloudera.util.bloom;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.apache.hadoop.util.bloom.BloomFilter;
import org.apache.hadoop.util.bloom.Key;
import org.apache.hadoop.util.hash.Hash;
import com.google.common.base.Preconditions;
final BloomFilter bloom;
final static int hashType = Hash.JENKINS_HASH;
public BloomSet(
int nbits,
int hashes) {
bloom = new BloomFilter(nbits, hashes, hashType);
}
Preconditions.checkArgument(src != null);
byte[] bytes = src.getBytes();
bloom = deserialize(bytes);
}
bloom = deserialize(serialized);
}
try {
Preconditions.checkArgument(serialized != null);
DataInputStream in = new DataInputStream(new ByteArrayInputStream(
serialized));
BloomFilter bloom = new BloomFilter();
bloom.readFields(in);
return bloom;
} catch (IOException e) {
throw new IllegalArgumentException(e.getMessage());
}
}
ByteBuffer buf = ByteBuffer.allocate(4);
buf.putInt(i);
Key k = new Key(buf.array());
bloom.add(k);
}
try {
ByteArrayOutputStream bits = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(bits);
bloom.write(out);
out.flush();
return bits.toByteArray();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
@Override
return Arrays.hashCode(getBytes());
}
@Override
public boolean equals(Object b) {
if (!(b instanceof BloomSet)) {
return false;
}
byte[] as = getBytes();
byte[] bs = ((BloomSet) b).getBytes();
return Arrays.equals(as, bs);
}
public void and(BloomSet b) {
bloom.and(b.bloom);
}
public boolean contains(BloomSet subset) {
BloomSet subClone = new BloomSet(subset);
subClone.and(this);
return subClone.equals(subset);
}
}