Author: j16sdiz
Date: 2008-08-28 02:23:34 +0000 (Thu, 28 Aug 2008)
New Revision: 22196
Modified:
branches/saltedhashstore/freenet/src/freenet/support/CountingBloomFilter.java
Log:
port r22181, r22182 from db4o branch
Modified:
branches/saltedhashstore/freenet/src/freenet/support/CountingBloomFilter.java
===================================================================
---
branches/saltedhashstore/freenet/src/freenet/support/CountingBloomFilter.java
2008-08-27 18:53:52 UTC (rev 22195)
+++
branches/saltedhashstore/freenet/src/freenet/support/CountingBloomFilter.java
2008-08-28 02:23:34 UTC (rev 22196)
@@ -21,7 +21,7 @@
*/
protected CountingBloomFilter(int length, int k) {
super(length, k);
- filter = ByteBuffer.allocate(length / 8 * 2);
+ filter = ByteBuffer.allocate(length / 4);
}
/**
@@ -35,7 +35,7 @@
*/
protected CountingBloomFilter(File file, int length, int k) throws
IOException {
super(length, k);
- int fileLength = length / 8 * 2;
+ int fileLength = length / 4;
if (!file.exists() || file.length() != fileLength)
needRebuild = true;
@@ -44,17 +44,23 @@
filter = raf.getChannel().map(MapMode.READ_WRITE, 0,
fileLength).load();
}
+ public CountingBloomFilter(int length, int k, byte[] buffer) {
+ super(length, k);
+ 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)
@@ -63,12 +69,12 @@
b &= ~(3 << offset % 4 * 2); // unset bit
b |= (v + 1) << offset % 4 * 2; // set bit
- filter.put(offset / 8 * 2, b);
+ filter.put(offset / 4, b);
}
@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)
@@ -77,7 +83,7 @@
b &= ~(3 << offset % 4 * 2); // unset bit
b |= (v - 1) << offset % 4 * 2; // set bit
- filter.put(offset / 8 * 2, b);
+ filter.put(offset / 4, b);
}
@Override