Author: toad
Date: 2008-08-26 21:12:19 +0000 (Tue, 26 Aug 2008)
New Revision: 22181
Modified:
branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java
Log:
FIX MAJOR BUG IN COUNTING BLOOM FILTER:
/ 4 not / 8 * 2.
setBit(1000) was effectively also doing setBit(1008).
PORT TO SALTED HASH STORE BRANCH ASAP!
Modified: branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java
2008-08-26 18:14:28 UTC (rev 22180)
+++ branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java
2008-08-26 21:12:19 UTC (rev 22181)
@@ -46,21 +46,21 @@
public CountingBloomFilter(int length, int k, byte[] buffer) {
super(length, k);
- assert(buffer.length == length / 8 * 2);
+ assert(buffer.length == length / 4);
filter = ByteBuffer.wrap(buffer);
}
@Override
- protected boolean getBit(int offset) {
- byte b = filter.get(offset / 8 * 2);
+ public boolean getBit(int offset) {
+ byte b = filter.get(offset / 4);
byte v = (byte) ((b >>> offset % 4 * 2) & 3);
return v != 0;
}
@Override
- protected void setBit(int offset) {
- byte b = filter.get(offset / 8 * 2);
+ public void setBit(int offset) {
+ byte b = filter.get(offset / 4);
byte v = (byte) ((b >>> offset % 4 * 2) & 3);
if (v == 3)
@@ -73,8 +73,8 @@
}
@Override
- protected void unsetBit(int offset) {
- byte b = filter.get(offset / 8 * 2);
+ public void unsetBit(int offset) {
+ byte b = filter.get(offset / 4);
byte v = (byte) ((b >>> offset % 4 * 2) & 3);
if (v == 0 || v == 3)