|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--upidiff.diff.Diff
A class to compare vectors of objects. The result of comparison
is a list of change
objects which form an
edit script. The objects compared are traditionally lines
of text from two files. Comparison options such as "ignore
whitespace" are implemented by modifying the equals
and hashcode
methods for the objects compared.
The basic algorithm is described in: "An O(ND) Difference Algorithm and its Variations", Eugene Myers, Algorithmica Vol. 1 No. 2, 1986, p 251.
This class outputs different results from GNU diff 1.15 on some inputs. Our results are actually better (smaller change list, smaller total size of changes), but it would be nice to know why. Perhaps there is a memory overwrite bug in GNU diff 1.15.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Nested Class Summary | |
(package private) class |
Diff.Change
The result of comparison is an "edit script": a chain of change objects. |
(package private) class |
Diff.FileData
Data on one input file being compared. |
Field Summary | |
private int[] |
bdiag
|
private int |
bdiagoff
|
private int |
cost
|
private int |
equiv_max
1 more than the maximum equivalence value used for this or its sibling file. |
private int[] |
fdiag
|
private int |
fdiagoff
|
private Diff.FileData[] |
filevec
|
boolean |
heuristic
When set to true, the comparison uses a heuristic to speed it up. |
private boolean |
inhibit
|
boolean |
no_discards
When set to true, the algorithm returns a guarranteed minimal set of changes. |
private int[] |
xvec
|
private int[] |
yvec
|
Constructor Summary | |
Diff(Object[] a,
Object[] b)
Prepare to find differences between two arrays. |
Method Summary | |
private Diff.Change |
build_reverse_script()
Scan the tables of which lines are inserted and deleted, producing an edit script in reverse order. |
private Diff.Change |
build_script()
Scan the tables of which lines are inserted and deleted, producing an edit script in forward order. |
Diff.Change |
calculateDiff()
|
private void |
compareseq(int xoff,
int xlim,
int yoff,
int ylim)
Compare in detail contiguous subsequences of the two files which are known, as a whole, to match each other. |
private int |
diag(int xoff,
int xlim,
int yoff,
int ylim)
Find the midpoint of the shortest edit script for a specified portion of the two files. |
private void |
discard_confusing_lines()
Discard lines from one file that have no matches in the other file. |
private void |
shift_boundaries()
Adjust inserts/deletes of blank lines to join changes as much as possible. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
private int equiv_max
public boolean heuristic
public boolean no_discards
private int[] xvec
private int[] yvec
private int[] fdiag
private int[] bdiag
private int fdiagoff
private int bdiagoff
private final Diff.FileData[] filevec
private int cost
private boolean inhibit
Constructor Detail |
public Diff(Object[] a, Object[] b)
equals
. The original Object arrays
are no longer needed for computing the differences. They will
be needed again later to print the results of the comparison as
an edit script, if desired.
Method Detail |
private int diag(int xoff, int xlim, int yoff, int ylim)
private void compareseq(int xoff, int xlim, int yoff, int ylim)
private void discard_confusing_lines()
private void shift_boundaries()
private Diff.Change build_reverse_script()
private Diff.Change build_script()
public Diff.Change calculateDiff()
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |