Example #1
0
        private void GetLongestSourceMatch(DifferenceState curItem, int destIndex, int destEnd, int sourceStart, int sourceEnd)
        {
            int maxDestLength     = (destEnd - destIndex) + 1;
            int currentBestLength = 0;
            int currentBestIndex  = -1;

            for (int sourceIndex = sourceStart; sourceIndex <= sourceEnd; sourceIndex++)
            {
                int maxLength = Math.Min(maxDestLength, (sourceEnd - sourceIndex) + 1);
                if (maxLength <= currentBestLength)
                {
                    // No chance to find a longer one any more
                    break;
                }

                int currentLength = GetSourceMatchLength(destIndex, sourceIndex, maxLength);
                if (currentLength > currentBestLength)
                {
                    // This is the best match so far
                    currentBestIndex  = sourceIndex;
                    currentBestLength = currentLength;
                }

                // Jump over the match
                sourceIndex += currentBestLength;
            }

            // DifferenceState current = _stateList.GetByIndex(destIndex);
            if (currentBestIndex == -1)
            {
                curItem.SetNoMatch();
            }
            else
            {
                curItem.SetMatch(currentBestIndex, currentBestLength);
            }
        }
Example #2
0
        private void GetLongestSourceMatch(DifferenceState curItem, int destIndex, int destEnd, int sourceStart, int sourceEnd)
        {
            int maxDestLength = (destEnd - destIndex) + 1;
            int currentBestLength = 0;
            int currentBestIndex = -1;
            for (int sourceIndex = sourceStart; sourceIndex <= sourceEnd; sourceIndex++)
            {
                int maxLength = Math.Min(maxDestLength, (sourceEnd - sourceIndex) + 1);
                if (maxLength <= currentBestLength)
                {
                    // No chance to find a longer one any more
                    break;
                }

                int currentLength = GetSourceMatchLength(destIndex, sourceIndex, maxLength);
                if (currentLength > currentBestLength)
                {
                    // This is the best match so far
                    currentBestIndex = sourceIndex;
                    currentBestLength = currentLength;
                }

                // Jump over the match
                sourceIndex += currentBestLength;
            }

            // DifferenceState current = _stateList.GetByIndex(destIndex);
            if (currentBestIndex == -1)
            {
                curItem.SetNoMatch();
            }
            else
            {
                curItem.SetMatch(currentBestIndex, currentBestLength);
            }
        }