belliottsmith commented on code in PR #207:
URL: https://github.com/apache/cassandra-accord/pull/207#discussion_r2185127951


##########
accord-core/src/main/java/accord/utils/SortedArrays.java:
##########
@@ -1793,4 +1794,29 @@ private static void swap(int[] values, int i, int j)
         values[i] = values[j];
         values[j] = t;
     }
+
+    public static <T extends Comparable<? super T>> BitSet 
toBitSet(SortedArrays.SortedArrayList<T> src,
+                                                                    
SortedArrays.SortedArrayList<T> subset)
+    {
+        BitSet bitSet = new BitSet(src.size());
+        for (int i = 0; i < src.size(); i++)
+        {
+            if (subset.contains(src.get(i)))

Review Comment:
   we should use `foldlIntersection` for O(n) versus O(n.lg(n)) complexity
   
   e.g.
   
   `return foldlIntersection(superset.array, 0, superset.array.length, 
subset.array, 0, subset.array.length, (i, bs, li, ri) -> { bs.set(li); return 
bs; }, new SimpleBitSet(superset.size()));`
   
   This does require copying foldlIntersection to support operating over 
objects rather than long:
   
   ```
       @Inline
       public static <T extends Comparable<? super T>, V> V 
foldlIntersection(T[] as, int ai, int alim, T[] bs, int bi, int blim, 
IndexedFoldIntersect<? super T, V> fold, V accumulate)
       {
           return foldlIntersection(1, Comparable::compareTo, as, ai, alim, bs, 
bi, blim, fold, accumulate);
       }
   
       @Inline
       public static <T, V> V foldlIntersection(int aiMatchIncrement, 
AsymmetricComparator<? super T, ? super T> comparator, T[] as, int ai, int 
alim, T[] bs, int bi, int blim, IndexedFoldIntersect<? super T, V> fold, V 
accumulate)
       {
           while (true)
           {
               long abi = findNextIntersection(as, ai, alim, bs, bi, blim, 
comparator);
               if (abi < 0)
                   break;
   
               ai = (int)(abi);
               bi = (int)(abi >>> 32);
   
               accumulate = fold.apply(as[ai], accumulate, ai, bi);
               ai += aiMatchIncrement;
               ++bi;
           }
   
           return accumulate;
       }
   ```
   
   and copying IndexedFoldIntersectToLong to IndexedFoldIntersect:
   
   ```
   package accord.utils;
   
   public interface IndexedFoldIntersect<P1, Accumulate>
   {
       /**
        * Apply some merge function accepting a constant object parameter p1, 
and the prior output of this function
        * or the initial value, to some element of a collection, with the index 
of the element provided.
        *
        * This function is used for efficiently folding over some subset of a 
collection.
        */
       Accumulate apply(P1 p1, Accumulate p2, int leftIndex, int rightIndex);
   }
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: pr-unsubscr...@cassandra.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: pr-unsubscr...@cassandra.apache.org
For additional commands, e-mail: pr-h...@cassandra.apache.org

Reply via email to