You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2022/08/23 10:32:17 UTC

[commons-collections] 01/03: COLLECTIONS-831: Add BloomFilter clear() method

This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-collections.git

commit 5a31023eae4bf2bd621fa8613699f54842109402
Author: Claude Warren, Jr <cl...@aiven.io>
AuthorDate: Tue Aug 23 11:27:24 2022 +0100

    COLLECTIONS-831: Add BloomFilter clear() method
---
 .../collections4/bloomfilter/ArrayCountingBloomFilter.java       | 6 ++++++
 .../org/apache/commons/collections4/bloomfilter/BloomFilter.java | 5 +++++
 .../commons/collections4/bloomfilter/SimpleBloomFilter.java      | 6 ++++++
 .../commons/collections4/bloomfilter/SparseBloomFilter.java      | 5 +++++
 .../collections4/bloomfilter/AbstractBloomFilterTest.java        | 9 +++++++++
 .../commons/collections4/bloomfilter/DefaultBloomFilterTest.java | 5 +++++
 6 files changed, 36 insertions(+)

diff --git a/src/main/java/org/apache/commons/collections4/bloomfilter/ArrayCountingBloomFilter.java b/src/main/java/org/apache/commons/collections4/bloomfilter/ArrayCountingBloomFilter.java
index 4202f6d86..ba13e6645 100644
--- a/src/main/java/org/apache/commons/collections4/bloomfilter/ArrayCountingBloomFilter.java
+++ b/src/main/java/org/apache/commons/collections4/bloomfilter/ArrayCountingBloomFilter.java
@@ -16,6 +16,7 @@
  */
 package org.apache.commons.collections4.bloomfilter;
 
+import java.util.Arrays;
 import java.util.Objects;
 import java.util.function.IntPredicate;
 import java.util.function.LongPredicate;
@@ -104,6 +105,11 @@ public final class ArrayCountingBloomFilter implements CountingBloomFilter {
         this.counts = source.counts.clone();
     }
 
+    @Override
+    public void clear() {
+        Arrays.fill(counts, 0);
+    }
+
     @Override
     public ArrayCountingBloomFilter copy() {
         return new ArrayCountingBloomFilter(this);
diff --git a/src/main/java/org/apache/commons/collections4/bloomfilter/BloomFilter.java b/src/main/java/org/apache/commons/collections4/bloomfilter/BloomFilter.java
index 58ed6bcb5..9471e5dcd 100644
--- a/src/main/java/org/apache/commons/collections4/bloomfilter/BloomFilter.java
+++ b/src/main/java/org/apache/commons/collections4/bloomfilter/BloomFilter.java
@@ -60,6 +60,11 @@ public interface BloomFilter extends IndexProducer, BitMapProducer {
      */
     Shape getShape();
 
+    /**
+     * Resets the filter to its initial, unpopulated state.
+     */
+    void clear();
+
     /**
      * Returns {@code true} if this filter contains the specified filter.
      *
diff --git a/src/main/java/org/apache/commons/collections4/bloomfilter/SimpleBloomFilter.java b/src/main/java/org/apache/commons/collections4/bloomfilter/SimpleBloomFilter.java
index c351f40c1..eb777f726 100644
--- a/src/main/java/org/apache/commons/collections4/bloomfilter/SimpleBloomFilter.java
+++ b/src/main/java/org/apache/commons/collections4/bloomfilter/SimpleBloomFilter.java
@@ -117,6 +117,12 @@ public final class SimpleBloomFilter implements BloomFilter {
         this.cardinality = source.cardinality;
     }
 
+    @Override
+    public void clear() {
+        Arrays.fill(bitMap, 0L);
+        cardinality = 0;
+    }
+
     @Override
     public long[] asBitMapArray() {
         return Arrays.copyOf(bitMap, bitMap.length);
diff --git a/src/main/java/org/apache/commons/collections4/bloomfilter/SparseBloomFilter.java b/src/main/java/org/apache/commons/collections4/bloomfilter/SparseBloomFilter.java
index 9cfa034eb..f5670ce1c 100644
--- a/src/main/java/org/apache/commons/collections4/bloomfilter/SparseBloomFilter.java
+++ b/src/main/java/org/apache/commons/collections4/bloomfilter/SparseBloomFilter.java
@@ -174,6 +174,11 @@ public final class SparseBloomFilter implements BloomFilter {
         return true;
     }
 
+    @Override
+    public void clear() {
+        indices.clear();
+    }
+
     @Override
     public Shape getShape() {
         return shape;
diff --git a/src/test/java/org/apache/commons/collections4/bloomfilter/AbstractBloomFilterTest.java b/src/test/java/org/apache/commons/collections4/bloomfilter/AbstractBloomFilterTest.java
index d8ceea079..a61885491 100644
--- a/src/test/java/org/apache/commons/collections4/bloomfilter/AbstractBloomFilterTest.java
+++ b/src/test/java/org/apache/commons/collections4/bloomfilter/AbstractBloomFilterTest.java
@@ -18,6 +18,7 @@ package org.apache.commons.collections4.bloomfilter;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -178,6 +179,14 @@ public abstract class AbstractBloomFilterTest<T extends BloomFilter> {
         assertTrue(bf4.contains(bf1));
     }
 
+    @Test
+    public void testClear() {
+        BloomFilter bf1 = createFilter(getTestShape(), from1);
+        assertNotEquals(0, bf1.cardinality());
+        bf1.clear();
+        assertEquals(0, bf1.cardinality());
+    }
+
     /**
      * Tests that the andCardinality calculations are correct.
      *
diff --git a/src/test/java/org/apache/commons/collections4/bloomfilter/DefaultBloomFilterTest.java b/src/test/java/org/apache/commons/collections4/bloomfilter/DefaultBloomFilterTest.java
index ff258ae80..ea7bd25f6 100644
--- a/src/test/java/org/apache/commons/collections4/bloomfilter/DefaultBloomFilterTest.java
+++ b/src/test/java/org/apache/commons/collections4/bloomfilter/DefaultBloomFilterTest.java
@@ -112,6 +112,11 @@ public class DefaultBloomFilterTest extends AbstractBloomFilterTest<DefaultBloom
             }
         }
 
+        @Override
+        public void clear() {
+            indices.clear();
+        }
+
         @Override
         public boolean forEachIndex(IntPredicate consumer) {
             for (Integer i : indices) {