static int updateMinUndecidedById()

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