Пример #1
0
        private Collection<MultiLineDiff> GetTraces(string[] originalStrs, string[] newStrs, int[][] buffer)
        {
            Collection<MultiLineDiff> trances = new Collection<MultiLineDiff>();

            int y = 0;
            int x = 0;

            while (y < buffer.Length - 1 && x < buffer[0].Length - 1)
            {
                MultiLineDiff diffItem = new MultiLineDiff();
                diffItem.NewLine = x;
                diffItem.OriginalLine = y;

                int currentValue = buffer[y][x];

                int addLength = buffer[y][x + 1];
                int deleteLength = buffer[y + 1][x];
                int updateLength = buffer[y + 1][x + 1];

                if (currentValue == addLength + 1)
                {
                    diffItem.ChangeType = 1;
                    x++;
                }
                else if (currentValue == deleteLength + 1)
                {
                    diffItem.ChangeType = -1;
                    y++;
                }
                else
                {
                    if (originalStrs[y] == newStrs[x])
                    {
                        diffItem.ChangeType = 0;
                    }
                    else
                    {
                        diffItem.ChangeType = 2;
                    }
                    x = x + 1;
                    y = y + 1;
                }
                trances.Add(diffItem);
            }

            if (y == buffer.Length - 1)
            {
                //Add
                while (x < newStrs.Length)
                {
                    MultiLineDiff diffItem = new MultiLineDiff();
                    diffItem.NewLine = x;
                    diffItem.OriginalLine = -1;
                    diffItem.ChangeType = 1;

                    trances.Add(diffItem);
                    x++;
                }
            }
            else if (x == buffer[0].Length - 1)
            {
                //delete
                while (y < originalStrs.Length)
                {
                    MultiLineDiff diffItem = new MultiLineDiff();
                    diffItem.NewLine = -1;
                    diffItem.OriginalLine = y;
                    diffItem.ChangeType = -1;
                    trances.Add(diffItem);
                    y++;
                }
            }
            return trances;
        }
Пример #2
0
        private Collection <MultiLineDiff> GetTraces(string[] originalStrs, string[] newStrs, int[][] buffer)
        {
            Collection <MultiLineDiff> trances = new Collection <MultiLineDiff>();

            int y = 0;
            int x = 0;

            while (y < buffer.Length - 1 && x < buffer[0].Length - 1)
            {
                MultiLineDiff diffItem = new MultiLineDiff();
                diffItem.NewLine      = x;
                diffItem.OriginalLine = y;

                int currentValue = buffer[y][x];

                int addLength    = buffer[y][x + 1];
                int deleteLength = buffer[y + 1][x];
                int updateLength = buffer[y + 1][x + 1];

                if (currentValue == addLength + 1)
                {
                    diffItem.ChangeType = 1;
                    x++;
                }
                else if (currentValue == deleteLength + 1)
                {
                    diffItem.ChangeType = -1;
                    y++;
                }
                else
                {
                    if (originalStrs[y] == newStrs[x])
                    {
                        diffItem.ChangeType = 0;
                    }
                    else
                    {
                        diffItem.ChangeType = 2;
                    }
                    x = x + 1;
                    y = y + 1;
                }
                trances.Add(diffItem);
            }

            if (y == buffer.Length - 1)
            {
                //Add
                while (x < newStrs.Length)
                {
                    MultiLineDiff diffItem = new MultiLineDiff();
                    diffItem.NewLine      = x;
                    diffItem.OriginalLine = -1;
                    diffItem.ChangeType   = 1;

                    trances.Add(diffItem);
                    x++;
                }
            }
            else if (x == buffer[0].Length - 1)
            {
                //delete
                while (y < originalStrs.Length)
                {
                    MultiLineDiff diffItem = new MultiLineDiff();
                    diffItem.NewLine      = -1;
                    diffItem.OriginalLine = y;
                    diffItem.ChangeType   = -1;
                    trances.Add(diffItem);
                    y++;
                }
            }
            return(trances);
        }