/// <summary>Na základě algoritmu "An-O(ND)-Difference-Algorithm" od E. W. MYERSe porovná dva textové soubory</summary> /// <param name="c">Nejdelší společná subsekvence</param> /// <param name="x">Původní textový soubor</param> /// <param name="y">Nový textový soubor</param> /// <param name="i"></param> /// <param name="j"></param> /// <returns>Sada změn pro vytvoření nového souboru z původního</returns> private static DiffFile diff(int[][] c, File x, File y, int i, int j) { DiffFile d = new DiffFile(); if ((i > 0) && (j > 0) && (x.Content[i - 1].Equals(y.Content[j - 1]))) { d.add(diff(c, x, y, i - 1, j - 1)); d.add(new DiffLine(i, KEEP_SYMBOL, x.Content[i - 1])); } else { if ((j > 0) && ((i == 0) || c[i][j - 1] >= c[i - 1][j])) { d.add(diff(c, x, y, i, j - 1)); d.add(new DiffLine(j, ADD_SYMBOL, y.Content[j - 1])); } else if ((i > 0) && ((j == 0) || c[i][j - 1] < c[i - 1][j])) { d.add(diff(c, x, y, i - 1, j)); d.add(new DiffLine(i, DEL_SYMBOL, x.Content[i - 1])); } } return d; }
/// <summary>Připojí jeden virtuální soubor na konec druhého</summary> /// <param name="file">Přidávaný soubor</param> public void add(DiffFile file) { foreach(DiffLine line in file.Content) content.Add(line); }