public void forEachUniqueTxnId()

in accord-core/src/main/java/accord/primitives/KeyDeps.java [319:363]


    public void forEachUniqueTxnId(Ranges ranges, Consumer<TxnId> forEach)
    {
        if (txnIds.length == 0)
            return;

        if (txnIds.length <= 64)
        {
            long bitset = Routables.foldl(keys, ranges, (key, ignore, value, keyIndex) -> {
                int index = startOffset(keyIndex);
                int end = endOffset(keyIndex);

                while (index < end)
                {
                    long next = keysToTxnIds[index++];
                    if (next >= 64)
                        break;
                    value |= 1L << next;
                }

                return value;
            }, 0, 0, -1L >>> (64 - txnIds.length));

            while (bitset != 0)
            {
                int i = Long.numberOfTrailingZeros(bitset);
                TxnId txnId = txnIds[i];
                forEach.accept(txnId);
                bitset ^= Long.lowestOneBit(bitset);
            }
        }
        else
        {
            BitSet bitset = Routables.foldl(keys, ranges, (key, value, keyIndex) -> {
                int index = startOffset(keyIndex);
                int end = endOffset(keyIndex);
                while (index < end)
                    value.set(keysToTxnIds[index++]);
                return value;
            }, new BitSet(txnIds.length));

            int i = -1;
            while ((i = bitset.nextSetBit(i + 1)) >= 0)
                forEach.accept(txnIds[i]);
        }
    }