@@ -112,11 +112,9 @@ export class MyArray {
112112// Our total memory usage for storing history is (worst-case):
113113// 2 * [(MaxDifferencesHistory + 1) * (MaxDifferencesHistory + 1) - 1] * sizeof(int)
114114// 2 * [1448*1448 - 1] * 4 = 16773624 = 16MB
115- let MaxDifferencesHistory = 1447 ;
116- //let MaxDifferencesHistory = 100;
117-
118-
119-
115+ const enum LocalConstants {
116+ MaxDifferencesHistory = 1447
117+ }
120118
121119/**
122120 * A utility class which helps to create the set of DiffChanges from
@@ -309,8 +307,8 @@ export class LcsDiff {
309307 * @returns An array of the differences between the two input sequences.
310308 */
311309 private _ComputeDiff ( originalStart : number , originalEnd : number , modifiedStart : number , modifiedEnd : number , pretty : boolean ) : DiffChange [ ] {
312- let quitEarlyArr = [ false ] ;
313- let changes = this . ComputeDiffRecursive ( originalStart , originalEnd , modifiedStart , modifiedEnd , quitEarlyArr ) ;
310+ const quitEarlyArr = [ false ] ;
311+ const changes = this . ComputeDiffRecursive ( originalStart , originalEnd , modifiedStart , modifiedEnd , quitEarlyArr ) ;
314312
315313 if ( pretty ) {
316314 // We have to clean up the computed diff to be more intuitive
@@ -372,11 +370,12 @@ export class LcsDiff {
372370 }
373371
374372 // This problem can be solved using the Divide-And-Conquer technique.
375- let midOriginalArr = [ 0 ] , midModifiedArr = [ 0 ] ;
376- let result = this . ComputeRecursionPoint ( originalStart , originalEnd , modifiedStart , modifiedEnd , midOriginalArr , midModifiedArr , quitEarlyArr ) ;
373+ const midOriginalArr = [ 0 ] ;
374+ const midModifiedArr = [ 0 ] ;
375+ const result = this . ComputeRecursionPoint ( originalStart , originalEnd , modifiedStart , modifiedEnd , midOriginalArr , midModifiedArr , quitEarlyArr ) ;
377376
378- let midOriginal = midOriginalArr [ 0 ] ;
379- let midModified = midModifiedArr [ 0 ] ;
377+ const midOriginal = midOriginalArr [ 0 ] ;
378+ const midModified = midModifiedArr [ 0 ] ;
380379
381380 if ( result !== null ) {
382381 // Result is not-null when there was enough memory to compute the changes while
@@ -388,7 +387,7 @@ export class LcsDiff {
388387 // Second Half: (midOriginal + 1, minModified + 1) to (originalEnd, modifiedEnd)
389388 // NOTE: ComputeDiff() is inclusive, therefore the second range starts on the next point
390389
391- let leftChanges = this . ComputeDiffRecursive ( originalStart , midOriginal , modifiedStart , midModified , quitEarlyArr ) ;
390+ const leftChanges = this . ComputeDiffRecursive ( originalStart , midOriginal , modifiedStart , midModified , quitEarlyArr ) ;
392391 let rightChanges : DiffChange [ ] = [ ] ;
393392
394393 if ( ! quitEarlyArr [ 0 ] ) {
@@ -415,8 +414,10 @@ export class LcsDiff {
415414 forwardPoints : Int32Array , reversePoints : Int32Array ,
416415 originalIndex : number , originalEnd : number , midOriginalArr : number [ ] ,
417416 modifiedIndex : number , modifiedEnd : number , midModifiedArr : number [ ] ,
418- deltaIsEven : boolean , quitEarlyArr : boolean [ ] ) : DiffChange [ ] {
419- let forwardChanges : DiffChange [ ] | null = null , reverseChanges : DiffChange [ ] | null = null ;
417+ deltaIsEven : boolean , quitEarlyArr : boolean [ ]
418+ ) : DiffChange [ ] {
419+ let forwardChanges : DiffChange [ ] | null = null ;
420+ let reverseChanges : DiffChange [ ] | null = null ;
420421
421422 // First, walk backward through the forward diagonals history
422423 let changeHelper = new DiffChangeHelper ( ) ;
@@ -425,11 +426,10 @@ export class LcsDiff {
425426 let diagonalRelative = ( midOriginalArr [ 0 ] - midModifiedArr [ 0 ] ) - diagonalForwardOffset ;
426427 let lastOriginalIndex = Constants . MIN_SAFE_SMALL_INTEGER ;
427428 let historyIndex = this . m_forwardHistory . length - 1 ;
428- let diagonal : number ;
429429
430430 do {
431431 // Get the diagonal index from the relative diagonal number
432- diagonal = diagonalRelative + diagonalForwardBase ;
432+ const diagonal = diagonalRelative + diagonalForwardBase ;
433433
434434 // Figure out where we came from
435435 if ( diagonal === diagonalMin || ( diagonal < diagonalMax && forwardPoints [ diagonal - 1 ] < forwardPoints [ diagonal + 1 ] ) ) {
@@ -474,7 +474,7 @@ export class LcsDiff {
474474 let modifiedStartPoint = midModifiedArr [ 0 ] + 1 ;
475475
476476 if ( forwardChanges !== null && forwardChanges . length > 0 ) {
477- let lastForwardChange = forwardChanges [ forwardChanges . length - 1 ] ;
477+ const lastForwardChange = forwardChanges [ forwardChanges . length - 1 ] ;
478478 originalStartPoint = Math . max ( originalStartPoint , lastForwardChange . getOriginalEnd ( ) ) ;
479479 modifiedStartPoint = Math . max ( modifiedStartPoint , lastForwardChange . getModifiedEnd ( ) ) ;
480480 }
@@ -494,7 +494,7 @@ export class LcsDiff {
494494
495495 do {
496496 // Get the diagonal index from the relative diagonal number
497- diagonal = diagonalRelative + diagonalReverseBase ;
497+ const diagonal = diagonalRelative + diagonalReverseBase ;
498498
499499 // Figure out where we came from
500500 if ( diagonal === diagonalMin || ( diagonal < diagonalMax && reversePoints [ diagonal - 1 ] >= reversePoints [ diagonal + 1 ] ) ) {
@@ -555,7 +555,6 @@ export class LcsDiff {
555555 let originalIndex = 0 , modifiedIndex = 0 ;
556556 let diagonalForwardStart = 0 , diagonalForwardEnd = 0 ;
557557 let diagonalReverseStart = 0 , diagonalReverseEnd = 0 ;
558- let numDifferences : number ;
559558
560559 // To traverse the edit graph and produce the proper LCS, our actual
561560 // start position is just outside the given boundary
@@ -575,26 +574,26 @@ export class LcsDiff {
575574 // The integer value in the cell represents the originalIndex of the furthest
576575 // reaching point found so far that ends in that diagonal.
577576 // The modifiedIndex can be computed mathematically from the originalIndex and the diagonal number.
578- let maxDifferences = ( originalEnd - originalStart ) + ( modifiedEnd - modifiedStart ) ;
579- let numDiagonals = maxDifferences + 1 ;
580- let forwardPoints = new Int32Array ( numDiagonals ) ;
581- let reversePoints = new Int32Array ( numDiagonals ) ;
577+ const maxDifferences = ( originalEnd - originalStart ) + ( modifiedEnd - modifiedStart ) ;
578+ const numDiagonals = maxDifferences + 1 ;
579+ const forwardPoints = new Int32Array ( numDiagonals ) ;
580+ const reversePoints = new Int32Array ( numDiagonals ) ;
582581 // diagonalForwardBase: Index into forwardPoints of the diagonal which passes through (originalStart, modifiedStart)
583582 // diagonalReverseBase: Index into reversePoints of the diagonal which passes through (originalEnd, modifiedEnd)
584- let diagonalForwardBase = ( modifiedEnd - modifiedStart ) ;
585- let diagonalReverseBase = ( originalEnd - originalStart ) ;
583+ const diagonalForwardBase = ( modifiedEnd - modifiedStart ) ;
584+ const diagonalReverseBase = ( originalEnd - originalStart ) ;
586585 // diagonalForwardOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the
587586 // diagonal number (relative to diagonalForwardBase)
588587 // diagonalReverseOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the
589588 // diagonal number (relative to diagonalReverseBase)
590- let diagonalForwardOffset = ( originalStart - modifiedStart ) ;
591- let diagonalReverseOffset = ( originalEnd - modifiedEnd ) ;
589+ const diagonalForwardOffset = ( originalStart - modifiedStart ) ;
590+ const diagonalReverseOffset = ( originalEnd - modifiedEnd ) ;
592591
593592 // delta: The difference between the end diagonal and the start diagonal. This is used to relate diagonal numbers
594593 // relative to the start diagonal with diagonal numbers relative to the end diagonal.
595594 // The Even/Oddn-ness of this delta is important for determining when we should check for overlap
596- let delta = diagonalReverseBase - diagonalForwardBase ;
597- let deltaIsEven = ( delta % 2 === 0 ) ;
595+ const delta = diagonalReverseBase - diagonalForwardBase ;
596+ const deltaIsEven = ( delta % 2 === 0 ) ;
598597
599598 // Here we set up the start and end points as the furthest points found so far
600599 // in both the forward and reverse directions, respectively
@@ -613,15 +612,14 @@ export class LcsDiff {
613612 // away from the reference diagonal (which is diagonalForwardBase for forward, diagonalReverseBase for reverse).
614613 // --We extend on even diagonals (relative to the reference diagonal) only when numDifferences
615614 // is even and odd diagonals only when numDifferences is odd.
616- let diagonal : number , tempOriginalIndex : number ;
617- for ( numDifferences = 1 ; numDifferences <= ( maxDifferences / 2 ) + 1 ; numDifferences ++ ) {
615+ for ( let numDifferences = 1 ; numDifferences <= ( maxDifferences / 2 ) + 1 ; numDifferences ++ ) {
618616 let furthestOriginalIndex = 0 ;
619617 let furthestModifiedIndex = 0 ;
620618
621619 // Run the algorithm in the forward direction
622620 diagonalForwardStart = this . ClipDiagonalBound ( diagonalForwardBase - numDifferences , numDifferences , diagonalForwardBase , numDiagonals ) ;
623621 diagonalForwardEnd = this . ClipDiagonalBound ( diagonalForwardBase + numDifferences , numDifferences , diagonalForwardBase , numDiagonals ) ;
624- for ( diagonal = diagonalForwardStart ; diagonal <= diagonalForwardEnd ; diagonal += 2 ) {
622+ for ( let diagonal = diagonalForwardStart ; diagonal <= diagonalForwardEnd ; diagonal += 2 ) {
625623 // STEP 1: We extend the furthest reaching point in the present diagonal
626624 // by looking at the diagonals above and below and picking the one whose point
627625 // is further away from the start point (originalStart, modifiedStart)
@@ -633,7 +631,7 @@ export class LcsDiff {
633631 modifiedIndex = originalIndex - ( diagonal - diagonalForwardBase ) - diagonalForwardOffset ;
634632
635633 // Save the current originalIndex so we can test for false overlap in step 3
636- tempOriginalIndex = originalIndex ;
634+ const tempOriginalIndex = originalIndex ;
637635
638636 // STEP 2: We can continue to extend the furthest reaching point in the present diagonal
639637 // so long as the elements are equal.
@@ -657,7 +655,7 @@ export class LcsDiff {
657655 midOriginalArr [ 0 ] = originalIndex ;
658656 midModifiedArr [ 0 ] = modifiedIndex ;
659657
660- if ( tempOriginalIndex <= reversePoints [ diagonal ] && MaxDifferencesHistory > 0 && numDifferences <= ( MaxDifferencesHistory + 1 ) ) {
658+ if ( tempOriginalIndex <= reversePoints [ diagonal ] && LocalConstants . MaxDifferencesHistory > 0 && numDifferences <= ( LocalConstants . MaxDifferencesHistory + 1 ) ) {
661659 // BINGO! We overlapped, and we have the full trace in memory!
662660 return this . WALKTRACE ( diagonalForwardBase , diagonalForwardStart , diagonalForwardEnd , diagonalForwardOffset ,
663661 diagonalReverseBase , diagonalReverseStart , diagonalReverseEnd , diagonalReverseOffset ,
@@ -676,7 +674,7 @@ export class LcsDiff {
676674 }
677675
678676 // Check to see if we should be quitting early, before moving on to the next iteration.
679- let matchLengthOfLongest = ( ( furthestOriginalIndex - originalStart ) + ( furthestModifiedIndex - modifiedStart ) - numDifferences ) / 2 ;
677+ const matchLengthOfLongest = ( ( furthestOriginalIndex - originalStart ) + ( furthestModifiedIndex - modifiedStart ) - numDifferences ) / 2 ;
680678
681679 if ( this . ContinueProcessingPredicate !== null && ! this . ContinueProcessingPredicate ( furthestOriginalIndex , matchLengthOfLongest ) ) {
682680 // We can't finish, so skip ahead to generating a result from what we have.
@@ -686,7 +684,7 @@ export class LcsDiff {
686684 midOriginalArr [ 0 ] = furthestOriginalIndex ;
687685 midModifiedArr [ 0 ] = furthestModifiedIndex ;
688686
689- if ( matchLengthOfLongest > 0 && MaxDifferencesHistory > 0 && numDifferences <= ( MaxDifferencesHistory + 1 ) ) {
687+ if ( matchLengthOfLongest > 0 && LocalConstants . MaxDifferencesHistory > 0 && numDifferences <= ( LocalConstants . MaxDifferencesHistory + 1 ) ) {
690688 // Enough of the history is in memory to walk it backwards
691689 return this . WALKTRACE ( diagonalForwardBase , diagonalForwardStart , diagonalForwardEnd , diagonalForwardOffset ,
692690 diagonalReverseBase , diagonalReverseStart , diagonalReverseEnd , diagonalReverseOffset ,
@@ -713,7 +711,7 @@ export class LcsDiff {
713711 // Run the algorithm in the reverse direction
714712 diagonalReverseStart = this . ClipDiagonalBound ( diagonalReverseBase - numDifferences , numDifferences , diagonalReverseBase , numDiagonals ) ;
715713 diagonalReverseEnd = this . ClipDiagonalBound ( diagonalReverseBase + numDifferences , numDifferences , diagonalReverseBase , numDiagonals ) ;
716- for ( diagonal = diagonalReverseStart ; diagonal <= diagonalReverseEnd ; diagonal += 2 ) {
714+ for ( let diagonal = diagonalReverseStart ; diagonal <= diagonalReverseEnd ; diagonal += 2 ) {
717715 // STEP 1: We extend the furthest reaching point in the present diagonal
718716 // by looking at the diagonals above and below and picking the one whose point
719717 // is further away from the start point (originalEnd, modifiedEnd)
@@ -725,7 +723,7 @@ export class LcsDiff {
725723 modifiedIndex = originalIndex - ( diagonal - diagonalReverseBase ) - diagonalReverseOffset ;
726724
727725 // Save the current originalIndex so we can test for false overlap
728- tempOriginalIndex = originalIndex ;
726+ const tempOriginalIndex = originalIndex ;
729727
730728 // STEP 2: We can continue to extend the furthest reaching point in the present diagonal
731729 // as long as the elements are equal.
@@ -743,7 +741,7 @@ export class LcsDiff {
743741 midOriginalArr [ 0 ] = originalIndex ;
744742 midModifiedArr [ 0 ] = modifiedIndex ;
745743
746- if ( tempOriginalIndex >= forwardPoints [ diagonal ] && MaxDifferencesHistory > 0 && numDifferences <= ( MaxDifferencesHistory + 1 ) ) {
744+ if ( tempOriginalIndex >= forwardPoints [ diagonal ] && LocalConstants . MaxDifferencesHistory > 0 && numDifferences <= ( LocalConstants . MaxDifferencesHistory + 1 ) ) {
747745 // BINGO! We overlapped, and we have the full trace in memory!
748746 return this . WALKTRACE ( diagonalForwardBase , diagonalForwardStart , diagonalForwardEnd , diagonalForwardOffset ,
749747 diagonalReverseBase , diagonalReverseStart , diagonalReverseEnd , diagonalReverseOffset ,
@@ -762,7 +760,7 @@ export class LcsDiff {
762760 }
763761
764762 // Save current vectors to history before the next iteration
765- if ( numDifferences <= MaxDifferencesHistory ) {
763+ if ( numDifferences <= LocalConstants . MaxDifferencesHistory ) {
766764 // We are allocating space for one extra int, which we fill with
767765 // the index of the diagonal base index
768766 let temp = new Int32Array ( diagonalForwardEnd - diagonalForwardStart + 2 ) ;
@@ -778,8 +776,6 @@ export class LcsDiff {
778776
779777 }
780778
781-
782-
783779 // If we got here, then we have the full trace in history. We just have to convert it to a change list
784780 // NOTE: This part is a bit messy
785781 return this . WALKTRACE ( diagonalForwardBase , diagonalForwardStart , diagonalForwardEnd , diagonalForwardOffset ,
@@ -849,8 +845,8 @@ export class LcsDiff {
849845 let bestScore = this . _boundaryScore ( change . originalStart , change . originalLength , change . modifiedStart , change . modifiedLength ) ;
850846
851847 for ( let delta = 1 ; ; delta ++ ) {
852- let originalStart = change . originalStart - delta ;
853- let modifiedStart = change . modifiedStart - delta ;
848+ const originalStart = change . originalStart - delta ;
849+ const modifiedStart = change . modifiedStart - delta ;
854850
855851 if ( originalStart < originalStop || modifiedStart < modifiedStop ) {
856852 break ;
@@ -864,7 +860,7 @@ export class LcsDiff {
864860 break ;
865861 }
866862
867- let score = this . _boundaryScore ( originalStart , change . originalLength , modifiedStart , change . modifiedLength ) ;
863+ const score = this . _boundaryScore ( originalStart , change . originalLength , modifiedStart , change . modifiedLength ) ;
868864
869865 if ( score > bestScore ) {
870866 bestScore = score ;
@@ -891,7 +887,7 @@ export class LcsDiff {
891887 return true ;
892888 }
893889 if ( originalLength > 0 ) {
894- let originalEnd = originalStart + originalLength ;
890+ const originalEnd = originalStart + originalLength ;
895891 if ( this . _OriginalIsBoundary ( originalEnd - 1 ) || this . _OriginalIsBoundary ( originalEnd ) ) {
896892 return true ;
897893 }
@@ -911,7 +907,7 @@ export class LcsDiff {
911907 return true ;
912908 }
913909 if ( modifiedLength > 0 ) {
914- let modifiedEnd = modifiedStart + modifiedLength ;
910+ const modifiedEnd = modifiedStart + modifiedLength ;
915911 if ( this . _ModifiedIsBoundary ( modifiedEnd - 1 ) || this . _ModifiedIsBoundary ( modifiedEnd ) ) {
916912 return true ;
917913 }
@@ -920,8 +916,8 @@ export class LcsDiff {
920916 }
921917
922918 private _boundaryScore ( originalStart : number , originalLength : number , modifiedStart : number , modifiedLength : number ) : number {
923- let originalScore = ( this . _OriginalRegionIsBoundary ( originalStart , originalLength ) ? 1 : 0 ) ;
924- let modifiedScore = ( this . _ModifiedRegionIsBoundary ( modifiedStart , modifiedLength ) ? 1 : 0 ) ;
919+ const originalScore = ( this . _OriginalRegionIsBoundary ( originalStart , originalLength ) ? 1 : 0 ) ;
920+ const modifiedScore = ( this . _ModifiedRegionIsBoundary ( modifiedStart , modifiedLength ) ? 1 : 0 ) ;
925921 return ( originalScore + modifiedScore ) ;
926922 }
927923
@@ -942,14 +938,14 @@ export class LcsDiff {
942938 // might recurse in the middle of a change thereby splitting it into
943939 // two changes. Here in the combining stage, we detect and fuse those
944940 // changes back together
945- let result = new Array < DiffChange > ( left . length + right . length - 1 ) ;
941+ const result = new Array < DiffChange > ( left . length + right . length - 1 ) ;
946942 MyArray . Copy ( left , 0 , result , 0 , left . length - 1 ) ;
947943 result [ left . length - 1 ] = mergedChangeArr [ 0 ] ;
948944 MyArray . Copy ( right , 1 , result , left . length , right . length - 1 ) ;
949945
950946 return result ;
951947 } else {
952- let result = new Array < DiffChange > ( left . length + right . length ) ;
948+ const result = new Array < DiffChange > ( left . length + right . length ) ;
953949 MyArray . Copy ( left , 0 , result , 0 , left . length ) ;
954950 MyArray . Copy ( right , 0 , result , left . length , right . length ) ;
955951
@@ -970,9 +966,9 @@ export class LcsDiff {
970966 Debug . Assert ( left . modifiedStart <= right . modifiedStart , 'Left change is not less than or equal to right change' ) ;
971967
972968 if ( left . originalStart + left . originalLength >= right . originalStart || left . modifiedStart + left . modifiedLength >= right . modifiedStart ) {
973- let originalStart = left . originalStart ;
969+ const originalStart = left . originalStart ;
974970 let originalLength = left . originalLength ;
975- let modifiedStart = left . modifiedStart ;
971+ const modifiedStart = left . modifiedStart ;
976972 let modifiedLength = left . modifiedLength ;
977973
978974 if ( left . originalStart + left . originalLength >= right . originalStart ) {
@@ -1010,15 +1006,15 @@ export class LcsDiff {
10101006
10111007 // diagonalsBelow: The number of diagonals below the reference diagonal
10121008 // diagonalsAbove: The number of diagonals above the reference diagonal
1013- let diagonalsBelow = diagonalBaseIndex ;
1014- let diagonalsAbove = numDiagonals - diagonalBaseIndex - 1 ;
1015- let diffEven = ( numDifferences % 2 === 0 ) ;
1009+ const diagonalsBelow = diagonalBaseIndex ;
1010+ const diagonalsAbove = numDiagonals - diagonalBaseIndex - 1 ;
1011+ const diffEven = ( numDifferences % 2 === 0 ) ;
10161012
10171013 if ( diagonal < 0 ) {
1018- let lowerBoundEven = ( diagonalsBelow % 2 === 0 ) ;
1014+ const lowerBoundEven = ( diagonalsBelow % 2 === 0 ) ;
10191015 return ( diffEven === lowerBoundEven ) ? 0 : 1 ;
10201016 } else {
1021- let upperBoundEven = ( diagonalsAbove % 2 === 0 ) ;
1017+ const upperBoundEven = ( diagonalsAbove % 2 === 0 ) ;
10221018 return ( diffEven === upperBoundEven ) ? numDiagonals - 1 : numDiagonals - 2 ;
10231019 }
10241020 }
0 commit comments