public DifferentState GetByIndex(int index)
 {
     #if USE_HASH_TABLE
     DifferentState retval = (DifferentState)_table[index];
     if (retval == null)
     {
         retval = new DifferentState();
         _table.Add(index,retval);
     }
     #else
     DifferentState retval = _array[index];
     if (retval == null)
     {
         retval = new DifferentState();
         _array[index] = retval;
     }
     #endif
     return retval;
 }
Пример #2
0
 private void GetLongestSourceMatch(DifferentState curItem, int destIndex, int destEnd, int sourceStart, int sourceEnd)
 {
     int maxDestLength = (destEnd - destIndex) + 1;
     int curLength = 0;
     int curBestLength = 0;
     int curBestIndex = -1;
     int maxLength = 0;
     for (int sourceIndex = sourceStart; sourceIndex <= sourceEnd; sourceIndex++)
     {
         maxLength = Math.Min(maxDestLength, (sourceEnd - sourceIndex) + 1);
         if (maxLength <= curBestLength)
         {
             //No chance to find a longer one any more
             break;
         }
         curLength = GetSourceMatchLength(destIndex, sourceIndex, maxLength);
         if (curLength > curBestLength)
         {
             //This is the best match so far
             curBestIndex = sourceIndex;
             curBestLength = curLength;
         }
         //jump over the match
         sourceIndex += curBestLength;
     }
     //DiffState cur = _stateList.GetByIndex(destIndex);
     if (curBestIndex == -1)
     {
         curItem.SetNotMatched();
     }
     else
     {
         curItem.SetMatched(curBestIndex, curBestLength);
     }
 }