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]);
}
}