You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/06/25 15:25:50 UTC

[commons-collections] branch master updated: Move counting long predicate (#314)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new a79ea005b Move counting long predicate (#314)
a79ea005b is described below

commit a79ea005b1ec4ad228067a9c5f2e10dcfb324c5e
Author: Claude Warren <cl...@apache.org>
AuthorDate: Sat Jun 25 16:25:44 2022 +0100

    Move counting long predicate (#314)
    
    * Moved CounitngLongPredicate
    
    * Moved CounitngLongPredicate
    
    * fixed checkstyle issues
    
    * made instance vars private
---
 .../collections4/bloomfilter/BitMapProducer.java   | 30 ----------
 .../bloomfilter/CountingLongPredicate.java         | 68 ++++++++++++++++++++++
 2 files changed, 68 insertions(+), 30 deletions(-)

diff --git a/src/main/java/org/apache/commons/collections4/bloomfilter/BitMapProducer.java b/src/main/java/org/apache/commons/collections4/bloomfilter/BitMapProducer.java
index 84561eba5..542447e60 100644
--- a/src/main/java/org/apache/commons/collections4/bloomfilter/BitMapProducer.java
+++ b/src/main/java/org/apache/commons/collections4/bloomfilter/BitMapProducer.java
@@ -152,34 +152,4 @@ public interface BitMapProducer {
         });
         return fromBitMapArray(result);
     }
-
-    /**
-     * A long predicate that applies the test func to each member of the @{code ary} in sequence for each call to @{code test()}.
-     * if the @{code ary} is exhausted, the subsequent calls to to @{code test} are executed with a zero value.
-     * If the calls to @{code test} do not exhaust the @{code ary} the @{code forEachRemaining} method can be called to
-     * execute the @code{text} with a zero value for each remaining @{code idx} value.
-     *
-     */
-    class CountingLongPredicate implements LongPredicate {
-        int idx = 0;
-        final long[] ary;
-        final LongBiPredicate func;
-
-        CountingLongPredicate(long[] ary, LongBiPredicate func) {
-            this.ary = ary;
-            this.func = func;
-        }
-
-        @Override
-        public boolean test(long other) {
-            return func.test(idx == ary.length ? 0 : ary[idx++], other);
-        }
-
-        boolean forEachRemaining() {
-            while (idx != ary.length && func.test(ary[idx], 0)) {
-                idx++;
-            }
-            return idx == ary.length;
-        }
-    }
 }
diff --git a/src/main/java/org/apache/commons/collections4/bloomfilter/CountingLongPredicate.java b/src/main/java/org/apache/commons/collections4/bloomfilter/CountingLongPredicate.java
new file mode 100644
index 000000000..2611ae444
--- /dev/null
+++ b/src/main/java/org/apache/commons/collections4/bloomfilter/CountingLongPredicate.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.collections4.bloomfilter;
+
+import java.util.function.LongPredicate;
+
+/**
+ * A long predicate that applies the test func to each member of the @{code ary} in sequence for each call to @{code test()}.
+ * if the @{code ary} is exhausted, the subsequent calls to to @{code test} are executed with a zero value.
+ * If the calls to @{code test} do not exhaust the @{code ary} the @{code forEachRemaining} method can be called to
+ * execute the @code{text} with a zero value for each remaining @{code idx} value.
+ *
+ */
+class CountingLongPredicate implements LongPredicate {
+    private int idx = 0;
+    private final long[] ary;
+    private final LongBiPredicate func;
+
+    /**
+     * Constructs an instance that will compare the elements in @{code ary} with the elements returned by @{code func}.
+     * function is called as @{code func.test( idxValue, otherValue )}.  if there are more @{code otherValue} values than
+     * @{code idxValues} then @{code func} is called as @{code func.test( 0, otherValue )}.
+     * @param ary The array of long values to compare.
+     * @param func The function to apply to the pairs of long values.
+     */
+    CountingLongPredicate(long[] ary, LongBiPredicate func) {
+        this.ary = ary;
+        this.func = func;
+    }
+
+    @Override
+    public boolean test(long other) {
+        return func.test(idx == ary.length ? 0 : ary[idx++], other);
+    }
+
+    /**
+     * Call the long-long consuming bi-predicate for each remaining unpaired long in
+     * the input array. This method should be invoked after the predicate has been
+     * passed to {@link BitMapProducer#forEachBitMap(LongPredicate)} to consume any
+     * unpaired bitmaps. The second argument to the bi-predicate will be zero.
+     *
+     * @return true if all calls the predicate were successful
+     */
+    boolean forEachRemaining() {
+        // uses local references for optimization benefit.
+        int i = idx;
+        final long[] a = ary;
+        final int limit = a.length;
+        while (i != limit && func.test(a[i], 0)) {
+            i++;
+        }
+        return i == limit;
+    }
+}