in accord-core/src/main/java/accord/local/cfk/Updating.java [215:261]
static int updateMinUndecidedById(TxnInfo newInfo, int insertPos, int updatePos, CommandsForKey cfk, TxnInfo[] byId, TxnInfo[] newById, TxnId[] additions, int additionCount)
{
int curIndex = cfk.minUndecidedById;
int additionsBeforeOldUndecided = additionCount;
TxnInfo cur = null;
if (curIndex >= 0)
{
cur = byId[curIndex];
if (additionCount > 0)
{
additionsBeforeOldUndecided = Arrays.binarySearch(additions, 0, additionCount, cur);
if (additionsBeforeOldUndecided < 0)
additionsBeforeOldUndecided = -1 - additionsBeforeOldUndecided;
}
}
TxnId min = null;
for (int i = 0 ; i < additionsBeforeOldUndecided ; ++i)
{
TxnId addition = additions[i];
if (!cfk.mayExecute(addition) || cfk.isPreBootstrap(addition))
continue;
min = addition;
break;
}
if ((min == null || min.compareTo(newInfo) > 0) && newInfo.compareTo(COMMITTED) < 0 && cfk.mayExecute(newInfo) && !cfk.isPreBootstrap(newInfo))
min = newInfo;
if (min != null && cur != null && cur.compareTo(min) < 0)
min = null;
if (updatePos < 0 && min == null && cur != null && newInfo.compareTo(cur) < 0)
++additionsBeforeOldUndecided;
int newIndex = curIndex;
if (min == null && insertPos == newIndex)
newIndex = nextUndecided(newById, insertPos + 1, cfk);
else if (min == null && newIndex >= 0)
newIndex += additionsBeforeOldUndecided;
else if (min == newInfo)
newIndex = insertPos + (-1 - Arrays.binarySearch(additions, 0, additionCount, newInfo));
else if (min != null)
newIndex = Arrays.binarySearch(newById, 0, newById.length, min);
return newIndex;
}