Пример #1
0
        //////////////////////////////////////////////////////////////////////////////

        public int LookupAny12(int surr1, int surr2)
        {
            Prepare123();

            if (Ints123.Contains12(insertList, insertCount, surr1, surr2))
            {
                int idxFirst = Ints123.IndexFirst12(insertList, insertCount, surr1, surr2);
                return(insertList[3 * idxFirst + 2]);
            }

            int idx = Ints123.IndexFirst12(deleteList, deleteCount, surr1, surr2);

            if (idx == -1)
            {
                return(table.GetIter12(surr1, surr2).Get1());
            }

            int count = Ints123.Count12(deleteList, deleteCount, surr1, surr2, idx);

            TernaryTable.Iter12 it = table.GetIter12(surr1, surr2);
            while (!it.Done())
            {
                // Tuples in the [idx, idx+count) range are sorted in both 1/2/3
                // and 3/1/2 order, since the first two arguments are the same
                if (!Ints312.Contains3(deleteList, idx, count, it.Get1()))
                {
                    return(it.Get1());
                }
                it.Next();
            }

            throw ErrorHandler.InternalFail();
        }
Пример #2
0
 public void Delete12(int value1, int value2)
 {
     TernaryTable.Iter12 it = table.GetIter12(value1, value2);
     while (!it.Done())
     {
         deleteIdxs = Array.Append(deleteIdxs, deleteCount, it.Index());
         deleteList = Array.Append3(deleteList, deleteCount++, value1, value2, it.Get1());
         it.Next();
     }
 }