in accord-core/src/main/java/accord/primitives/Deps.java [178:216]
public List<TxnId> txnIds(Seekable keyOrRange)
{
List<TxnId> keyIds, rangeIds;
switch (keyOrRange.domain())
{
default: throw new AssertionError();
case Key:
{
Key key = keyOrRange.asKey();
keyIds = keyDeps.txnIds(key);
rangeIds = rangeDeps.txnIds(key);
break;
}
case Range:
{
Range range = keyOrRange.asRange();
keyIds = keyDeps.txnIds(range);
rangeIds = rangeDeps.txnIds(range);
}
}
if (rangeIds.isEmpty()) return keyIds;
if (keyIds.isEmpty()) return rangeIds;
List<TxnId> output = new ArrayList<>(keyIds.size() + rangeIds.size());
int ki = 0, ri = 0;
while (ki < keyIds.size() && ri < rangeIds.size())
{
int c = keyIds.get(ki).compareTo(rangeIds.get(ri));
Invariants.checkState(c != 0);
if (c < 0) output.add(keyIds.get(ki++));
else output.add(rangeIds.get(ri++));
}
while (ki < keyIds.size())
output.add(keyIds.get(ki++));
while (ri < rangeIds.size())
output.add(rangeIds.get(ri++));
return output;
}