Class Diff.FileData

  • Enclosing class:
    Diff

    class Diff.FileData
    extends java.lang.Object
    Data on one input file being compared.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private int bufferedLines
      Number of elements (lines) in this file.
      private boolean[] changedFlag
      Array, indexed by real origin-1 line number, containing true for a line that is an insertion or a deletion.
      private int[] equivs
      Vector, indexed by line number, containing an equivalence code for each line.
      private int nondiscardedLines
      Total number of nondiscarded lines.
      private int[] realindexes
      Vector mapping virtual line numbers (not counting discarded lines) to real ones (counting those lines).
      private int[] undiscarded
      Vector, like the previous one except that the elements for discarded lines have been squeezed out.
    • Constructor Summary

      Constructors 
      Constructor Description
      FileData​(int length)  
      FileData​(java.lang.Object[] data, java.util.Map<java.lang.Object,​java.lang.Integer> h)  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      (package private) void clear()
      Allocate changed array for the results of comparison.
      private void discard​(byte[] discards)
      Actually discard the lines.
      private byte[] discardable​(int... counts)
      Mark to be discarded each line that matches no line of another file.
      (package private) void discardConfusingLines​(Diff.FileData f)
      Discard lines that have no matches in another file.
      (package private) int[] equivCount()
      Return equiv_count[I] as the number of lines in this file that fall in equivalence class I.
      private void filterDiscards​(byte[] discards)
      Don't really discard the provisional lines except when they occur in a run of discardables, with nonprovisionals at the beginning and end.
      (package private) void shiftBoundaries​(Diff.FileData f)
      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

      • bufferedLines

        private final int bufferedLines
        Number of elements (lines) in this file.
      • equivs

        private final int[] equivs
        Vector, indexed by line number, containing an equivalence code for each line. It is this vector that is actually compared with that of another file to generate differences.
      • undiscarded

        private final int[] undiscarded
        Vector, like the previous one except that the elements for discarded lines have been squeezed out.
      • realindexes

        private final int[] realindexes
        Vector mapping virtual line numbers (not counting discarded lines) to real ones (counting those lines). Both are origin-0.
      • nondiscardedLines

        private int nondiscardedLines
        Total number of nondiscarded lines.
      • changedFlag

        private boolean[] changedFlag
        Array, indexed by real origin-1 line number, containing true for a line that is an insertion or a deletion. The results of comparison are stored here.
    • Constructor Detail

      • FileData

        FileData​(java.lang.Object[] data,
                 java.util.Map<java.lang.Object,​java.lang.Integer> h)
    • Method Detail

      • clear

        void clear()
        Allocate changed array for the results of comparison.
      • equivCount

        int[] equivCount()
        Return equiv_count[I] as the number of lines in this file that fall in equivalence class I.
        Returns:
        the array of equivalence class counts.
      • discardConfusingLines

        void discardConfusingLines​(Diff.FileData f)
        Discard lines that have no matches in another file.

        A line which is discarded will not be considered by the actual comparison algorithm; it will be as if that line were not in the file. The file's `realindexes' table maps virtual line numbers (which don't count the discarded lines) into real line numbers; this is how the actual comparison algorithm produces results that are comprehensible when the discarded lines are counted.

        When we discard a line, we also mark it as a deletion or insertion so that it will be printed in the output.

        Parameters:
        f - the other file
      • discardable

        private byte[] discardable​(int... counts)
        Mark to be discarded each line that matches no line of another file. If a line matches many lines, mark it as provisionally discardable.
        Parameters:
        counts - The count of each equivalence number for the other file.
        Returns:
        0=nondiscardable, 1=discardable or 2=provisionally discardable for each line
        See Also:
        equivCount()
      • filterDiscards

        private void filterDiscards​(byte[] discards)
        Don't really discard the provisional lines except when they occur in a run of discardables, with nonprovisionals at the beginning and end.
        Parameters:
        discards - discards
      • discard

        private void discard​(byte[] discards)
        Actually discard the lines.
        Parameters:
        discards - flags lines to be discarded
      • shiftBoundaries

        void shiftBoundaries​(Diff.FileData f)
        Adjust inserts/deletes of blank lines to join changes as much as possible.

        We do something when a run of changed lines include a blank line at one end and have an excluded blank line at the other. We are free to choose which blank line is included. `compareseq' always chooses the one at the beginning, but usually it is cleaner to consider the following blank line to be the "change". The only exception is if the preceding blank line would join this change to other changes.

        Parameters:
        f - the file being compared against