Class DiffXFitopsy
- All Implemented Interfaces:
DiffXAlgorithm
Implementation note: this algorithm effectively detects the correct changes in the sequences, but will not necessarily return events that can be serialised as well-formed XML as they stand.
Known problem in this implementation: elements that contain themselves tend to generate events that are harder to serialise as XML.
This class is said 'fit' because it will adapt the matrix to the sequences that it is being given in order to improve performance.
Note: The name of this class comes from a contracted version of the features of this algorithm, as explained below:
- Weighted, each token is has a given weight;
- Symmetrical, when possible, the algorithm will try to choose a path that is symmetrical in regards to the arrangement of the tokens;
- Matrix, this class uses a matrix for its internal representation;
This class is not synchronised.
- Version:
- 8 April 2005
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final booleanSet totrueto show debug info.private ElementStateThe state of the elements.private MatrixMatrix storing the paths. -
Constructor Summary
ConstructorsConstructorDescriptionDiffXFitopsy(EventSequence seq0, EventSequence seq1) Creates a new DiffXAlgorithmBase. -
Method Summary
Modifier and TypeMethodDescriptionintlength()Returns the length of the longest common sequence.private voidprintLost(int i, int j) Print information when the algorithm gets lost in the matrix, ie when it does not know which direction to follow.voidprocess(DiffXFormatter formatter) Writes the diff sequence using the specified formatter.private voidprocessEmpty(DiffXFormatter formatter) Writes the diff sequence using the specified formatter when one of the sequences is empty.private static MatrixsetupMatrix(EventSequence s1, EventSequence s2) Determines the most appropriate matrix to use.Methods inherited from class com.topologi.diffx.algorithm.DiffXAlgorithmBase
getFirstSequence, getSecondSequence
-
Field Details
-
DEBUG
private static final boolean DEBUGSet totrueto show debug info.- See Also:
-
matrix
Matrix storing the paths. -
estate
The state of the elements.
-
-
Constructor Details
-
DiffXFitopsy
Creates a new DiffXAlgorithmBase.- Parameters:
seq0- The first sequence to compare.seq1- The second sequence to compare.
-
-
Method Details
-
length
public int length()Returns the length of the longest common sequence.- Returns:
- the length of the longest common sequence.
-
process
Writes the diff sequence using the specified formatter.- Parameters:
formatter- The formatter that will handle the output.- Throws:
IOException- If thrown by the formatter.
-
processEmpty
Writes the diff sequence using the specified formatter when one of the sequences is empty.The result becomes either only insertions (when the second sequence is empty) or deletions (when the first sequence is empty).
- Parameters:
formatter- The formatter that will handle the output.- Throws:
IOException- If thrown by the formatter.
-
setupMatrix
Determines the most appropriate matrix to use.Calculates the maximum length of the shortest weighted path if both sequences are totally different, which corresponds to the sum of all the events.
- Parameters:
s1- The first sequence.s2- The second sequence.- Returns:
- The most appropriate matrix.
-
printLost
private void printLost(int i, int j) Print information when the algorithm gets lost in the matrix, ie when it does not know which direction to follow.- Parameters:
i- The X position.j- The Y position.
-