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


Reply via email to