myersDiffAlgorithm.ts ×13

Frontier kind: Code frontier

unlabeled · c_5299f9b4daba

18 tests · 6536 LOC · 40 files · introduces 0 tests · 115 LOC · 1 file

Introduces — evidence that enters the hierarchy at this concept

Code
13 ranges115 lines · 1 files
Tests
0 tests

Contains — complete concept membership

All code (extent)
1075 ranges6536 lines · 40 files · Browse complete extent
All tests (intent)
18 testsBrowse complete intent

Neighbourhood graph

The orange circle is the focus. Violet and green circles are every ancestor and descendant, broader and narrower, at any distance; blue squares and pink diamonds are the introduced files and exact introduced tests of every visible concept, not only the focus's. Arrows point from broader to narrower concepts and bridge only concepts omitted from this view. Undirected links show source or test introduction. Concept and file size follows LOC; exact test nodes use test-count units.

Introduced files, introduced tests, and structurally relevant concept specialization

In the embedded map, ordinary wheel input scrolls the page; use the visible controls to zoom and drag to pan. Open the full-screen map for canvas navigation: wheel pans, Ctrl/Command plus wheel zooms, and arrow keys pan when this region is focused. On touch screens, open the full-screen map to pan or pinch. If JavaScript or WebGL is unavailable, use the native relationship evidence on this page.

Introduced files, introduced tests, and structurally relevant concept specializationheuristicSequenceOptimizations.ts ×1 · 2 introduced LOCheuristicSequenceOptimiz…fixtures.test|title=diffing fixtures difficult-move-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…fixtures.test|title=diffing fixtures false-positive-move-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…computeMovedLines.ts ×1 · 3 introduced LOCcomputeMovedLines.ts ×1fixtures.test|title=diffing fixtures ts-confusing-2-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…fixtures.test|title=diffing fixtures class-replacement-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…fixtures.test|title=diffing fixtures method-splitting-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…fixtures.test|title=diffing fixtures ts-example1-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…fixtures.test|title=diffing fixtures issue-201713-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…fixtures.test|title=diffing fixtures noise-1-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…fixtures.test|title=diffing fixtures shifting-twice-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…fixtures.test|title=diffing fixtures ws-alignment-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…fixtures.test|title=diffing fixtures noise-2-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…fixtures.test|title=diffing fixtures random-match-2-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…linesSliceCharSequence.ts ×1 · 2 introduced LOClinesSliceCharSequence.t…fixtures.test|title=diffing fixtures ts-too-much-minimization-advanced|occurrence=1 · 0 introduced LOCfixtures.test|title=diff…myersDiffAlgorithm.ts ×1 · 5 introduced LOCmyersDiffAlgorithm.ts ×1myersDiffAlgorithm.ts ×1 · 4 introduced LOCmyersDiffAlgorithm.ts ×1defaultLinesDiffComputer.test|title=myers 1|occurrence=1 · 0 introduced LOCdefaultLinesDiffComputer…myersDiffAlgorithm.ts ×1 · 4 introduced LOCmyersDiffAlgorithm.ts ×1myersDiffAlgorithm.ts ×3 · 9 introduced LOCmyersDiffAlgorithm.ts ×3linesSliceCharSequence.ts ×1 · 2 introduced LOClinesSliceCharSequence.t…diffAlgorithm.ts ×1 · 3 introduced LOCdiffAlgorithm.ts ×1linesSliceCharSequence.ts ×1 · 2 introduced LOClinesSliceCharSequence.t…linesSliceCharSequence.ts ×1 · 3 introduced LOClinesSliceCharSequence.t…linesSliceCharSequence.ts ×4 · 19 introduced LOClinesSliceCharSequence.t…diffAlgorithm.ts ×1 · 7 introduced LOCdiffAlgorithm.ts ×1diffAlgorithm.ts ×23 · 285 introduced LOCdiffAlgorithm.ts ×23rangeMapping.ts ×28 · 126 introduced LOCrangeMapping.ts ×28textEdit.ts ×1 · 17 introduced LOCtextEdit.ts ×1textEdit.ts ×35 · 110 introduced LOCtextEdit.ts ×35abstractText.ts ×16 · 53 introduced LOCabstractText.ts ×16textLength.ts ×21 · 60 introduced LOCtextLength.ts ×21positionToOffsetImpl.ts ×19 · 71 introduced LOCpositionToOffsetImpl.ts …offsetRange.ts ×2 · 2 introduced LOCoffsetRange.ts ×2strings.test|title=Strings trimWhitespace|occurrence=1 · 0 introduced LOCstrings.test|title=Strin…strings.ts ×101 · 542 introduced LOCstrings.ts ×101lineRange.ts ×40 · 148 introduced LOClineRange.ts ×40cancellation.test|title=CancellationToken None|occurrence=1 · 0 introduced LOCcancellation.test|title=…cancellation.ts ×18 · 90 introduced LOCcancellation.ts ×18event.ts ×93 · 864 introduced LOCevent.ts ×93range.ts ×1 · 5 introduced LOCrange.ts ×1range.ts ×3 · 3 introduced LOCrange.ts ×3range.ts ×40 · 247 introduced LOCrange.ts ×40offsetRange.ts ×40 · 132 introduced LOCoffsetRange.ts ×40position.ts ×16 · 113 introduced LOCposition.ts ×16uri.test|title=URI URI#file, win-speciale|occurrence=1, charCode.test|title=CharCode has good values|occurrence=1, +2 · 0 introduced LOCuri.test|title=URI URI#f…utils.ts ×3 · 9 introduced LOCutils.ts ×3linkedList.ts ×13 · 44 introduced LOClinkedList.ts ×13lifecycle.ts ×2 · 4 introduced LOClifecycle.ts ×2lifecycle.ts ×1 · 2 introduced LOClifecycle.ts ×1lifecycle.ts ×4 · 8 introduced LOClifecycle.ts ×4lifecycle.ts ×6 · 16 introduced LOClifecycle.ts ×6lazy.ts ×1 · 2 introduced LOClazy.ts ×1lazy.ts ×3 · 37 introduced LOClazy.ts ×3lifecycle.ts ×1 · 2 introduced LOClifecycle.ts ×1lifecycle.ts ×1 · 2 introduced LOClifecycle.ts ×1uint.ts ×2 · 43 introduced LOCuint.ts ×2arrays.ts ×1 · 2 introduced LOCarrays.ts ×1lifecycle.ts ×1 · 3 introduced LOClifecycle.ts ×1map.ts ×97 · 3334 introduced LOCmap.ts ×97src/vs/base/common/arrays.ts · 949 LOCcommon/arrays.tssrc/vs/base/common/arraysFind.ts · 226 LOCcommon/arraysFind.tssrc/vs/base/common/assert.ts · 91 LOCcommon/assert.tssrc/vs/base/common/cache.ts · 153 LOCcommon/cache.tssrc/vs/base/common/cancellation.ts · 206 LOCcommon/cancellation.tssrc/vs/base/common/charCode.ts · 450 LOCcommon/charCode.tssrc/vs/base/common/collections.ts · 176 LOCcommon/collections.tssrc/vs/base/common/errors.ts · 357 LOCcommon/errors.tssrc/vs/base/common/event.ts · 1964 LOCcommon/event.tssrc/vs/base/common/functional.ts · 32 LOCcommon/functional.tssrc/vs/base/common/iterator.ts · 194 LOCcommon/iterator.tssrc/vs/base/common/lazy.ts · 57 LOCcommon/lazy.tssrc/vs/base/common/lifecycle.ts · 974 LOCcommon/lifecycle.tssrc/vs/base/common/linkedList.ts · 151 LOCcommon/linkedList.tssrc/vs/base/common/map.ts · 1016 LOCcommon/map.tssrc/vs/base/common/marshallingIds.ts · 33 LOCcommon/marshallingIds.tssrc/vs/base/common/path.ts · 1589 LOCcommon/path.tssrc/vs/base/common/platform.ts · 281 LOCcommon/platform.tssrc/vs/base/common/process.ts · 76 LOCcommon/process.tssrc/vs/base/common/stopwatch.ts · 41 LOCcommon/stopwatch.tssrc/vs/base/common/strings.ts · 1413 LOCcommon/strings.tssrc/vs/base/common/types.ts · 410 LOCcommon/types.tssrc/vs/base/common/uint.ts · 59 LOCcommon/uint.tssrc/vs/base/common/uri.ts · 754 LOCcommon/uri.tssrc/vs/base/test/common/utils.ts · 107 LOCcommon/utils.tssrc/vs/editor/common/core/edits/textEdit.ts · 784 LOCedits/textEdit.tssrc/vs/editor/common/core/position.ts · 184 LOCcore/position.tssrc/vs/editor/common/core/range.ts · 520 LOCcore/range.tssrc/vs/editor/common/core/ranges/lineRange.ts · 414 LOCranges/lineRange.tssrc/vs/editor/common/core/ranges/offsetRange.ts · 290 LOCranges/offsetRange.tssrc/vs/editor/common/core/text/abstractText.ts · 130 LOCtext/abstractText.tssrc/vs/editor/common/core/text/positionToOffsetImpl.ts · 158 LOCtext/positionToOffsetImp…src/vs/editor/common/core/text/textLength.ts · 148 LOCtext/textLength.tssrc/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm.ts · 208 LOCalgorithms/diffAlgorithm…src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing.ts · 107 LOCalgorithms/dynamicProgra…src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm.ts · 176 LOCalgorithms/myersDiffAlgo…src/vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines.ts · 329 LOCdefaultLinesDiffComputer…src/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts · 271 LOCdefaultLinesDiffComputer…src/vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts · 473 LOCdefaultLinesDiffComputer…src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts · 246 LOCdefaultLinesDiffComputer…src/vs/editor/common/diff/defaultLinesDiffComputer/utils.ts · 74 LOCdefaultLinesDiffComputer…src/vs/editor/common/diff/rangeMapping.ts · 416 LOCdiff/rangeMapping.tssrc/vs/nls.ts · 244 LOCvs/nls.tscancellation.test|title=CancellationToken None|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/cancellation.test|title=CancellationToken None|occurrence=1cancellation.test|title=…charCode.test|title=CharCode has good values|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/charCode.test|title=CharCode has good values|occurrence=1charCode.test|title=Char…path.test|title=Paths (Node Implementation) path|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/path.test|title=Paths (Node Implementation) path|occurrence=1path.test|title=Paths (N…strings.test|title=Strings trimWhitespace|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/strings.test|title=Strings trimWhitespace|occurrence=1strings.test|title=Strin…uri.test|title=URI File paths containing apostrophes break URI parsing and cannot be opened #276075|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/uri.test|title=URI File paths containing apostrophes break URI parsing and cannot be opened #276075|occurrence=1uri.test|title=URI File …uri.test|title=URI URI#file, win-speciale|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/base/test/common/uri.test|title=URI URI#file, win-speciale|occurrence=1uri.test|title=URI URI#f…defaultLinesDiffComputer.test|title=myers 1|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/defaultLinesDiffComputer.test|title=myers 1|occurrence=1defaultLinesDiffComputer…fixtures.test|title=diffing fixtures class-replacement-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures class-replacement-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures difficult-move-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures difficult-move-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures false-positive-move-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures false-positive-move-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures invalid-diff-trimws-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures invalid-diff-trimws-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures issue-185779-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures issue-185779-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures issue-201713-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures issue-201713-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures method-splitting-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures method-splitting-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures noise-1-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures noise-1-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures noise-2-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures noise-2-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures noisy-move1-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures noisy-move1-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures random-match-2-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures random-match-2-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures shifting-twice-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures shifting-twice-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures test|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures test|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures ts-confusing-2-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures ts-confusing-2-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures ts-example1-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures ts-example1-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures ts-too-much-minimization-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures ts-too-much-minimization-advanced|occurrence=1fixtures.test|title=diff…fixtures.test|title=diffing fixtures ws-alignment-advanced|occurrence=1 · introduced test · mocha:v1|namespace=vscode@05c208e9e28d8c1c723fa08f85e2b7a96092e8e5|file=vs/editor/test/node/diffing/fixtures.test|title=diffing fixtures ws-alignment-advanced|occurrence=1fixtures.test|title=diff…Focused concept · myersDiffAlgorithm.ts ×13 · 115 introduced LOCmyersDiffAlgorithm.ts ×1…

Graph controls are ready.

Interactive rendering requires JavaScript and WebGL. Use the native relationship evidence on this page while the interactive map is unavailable.

Native relationship evidence

Every exact file and test below is linked only from the concept that introduces it.

Introduced tests

Every collected test enters the hierarchy at exactly one concept.

No tests are introduced at this concept. Its intent tests are introduced by other concepts.

Introduced code

Every collected source range enters the hierarchy at exactly one concept.

1 file ranked by introduced lines: 115 introduced LOC across 13 ranges. Expand a file to inspect source; the > gutter marks introduced lines.

src/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm.ts 115 introduced LOC · 13 ranges

Open complete file

17 return DiffAlgorithmResult.trivial(seq1, seq2);
18 }
20 > const seqX = seq1; // Text on the x axis
21 > const seqY = seq2; // Text on the y axis
22 >
23 > function getXAfterSnake(x: number, y: number): number {
24 > while (x < seqX.length && y < seqY.length && seqX.getElement(x) === seqY.getElement(y)) {
25 > x++;
26 > y++;
27 > }
28 > return x;
29 > }
30 >
31 > let d = 0;
32 > // V[k]: X value of longest d-line that ends in diagonal k.
33 > // d-line: path from (0,0) to (x,y) that uses exactly d non-diagonals.
34 > // diagonal k: Set of points (x,y) with x-y = k.
35 > // k=1 -> (1,0),(2,1)
36 > const V = new FastInt32Array();
37 > V.set(0, getXAfterSnake(0, 0));
38 >
39 > const paths = new FastArrayNegativeIndices<SnakePath | null>();
40 paths.set(0, V.get(0) === 0 ? null : new SnakePath(null, 0, 0, V.get(0)));
41
43
44 loop: while (true) {
46 > if (!timeout.isValid()) {
47 return DiffAlgorithmResult.trivialTimedOut(seqX, seqY);
48 }
49 > // The paper has `for (k = -d; k <= d; k += 2)`, but we can ignore diagonals that cannot influence the result. myersDiffAlgorithm.ts
50 > const lowerBound = -Math.min(d, seqY.length + (d % 2));
51 > const upperBound = Math.min(d, seqX.length + (d % 2));
52 > for (k = lowerBound; k <= upperBound; k += 2) {
53 > let step = 0;
54 > // We can use the X values of (d-1)-lines to compute X value of the longest d-lines.
55 > const maxXofDLineTop = k === upperBound ? -1 : V.get(k + 1); // We take a vertical non-diagonal (add a symbol in seqX)
56 > const maxXofDLineLeft = k === lowerBound ? -1 : V.get(k - 1) + 1; // We take a horizontal non-diagonal (+1 x) (delete a symbol in seqX)
57 > step++;
58 > const x = Math.min(Math.max(maxXofDLineTop, maxXofDLineLeft), seqX.length);
59 > const y = x - k;
60 > step++;
61 > if (x > seqX.length || y > seqY.length) {
62 // This diagonal is irrelevant for the result.
63 // TODO: Don't pay the cost for this in the next iteration.
64 continue;
65 }
66 > const newMaxX = getXAfterSnake(x, y); myersDiffAlgorithm.ts
67 > V.set(k, newMaxX);
68 > const lastPath = x === maxXofDLineTop ? paths.get(k + 1) : paths.get(k - 1);
69 > paths.set(k, newMaxX !== x ? new SnakePath(lastPath, x, y, newMaxX - x) : lastPath);
70 >
71 > if (V.get(k) === seqX.length && V.get(k) - k === seqY.length) {
72 > break loop;
73 > }
74 > }
75 > }
76 >
77 > let path = paths.get(k);
78 > const result: SequenceDiff[] = [];
79 > let lastAligningPosS1: number = seqX.length;
80 > let lastAligningPosS2: number = seqY.length;
81 >
82 > while (true) {
83 > const endX = path ? path.x + path.length : 0;
84 > const endY = path ? path.y + path.length : 0;
85 >
86 > if (endX !== lastAligningPosS1 || endY !== lastAligningPosS2) {
87 > result.push(new SequenceDiff(
88 > new OffsetRange(endX, lastAligningPosS1),
89 > new OffsetRange(endY, lastAligningPosS2),
90 > ));
91 > }
92 > if (!path) {
93 > break;
94 > }
95 > lastAligningPosS1 = path.x;
96 > lastAligningPosS2 = path.y;
97 >
98 > path = path.prev;
99 > }
100 >
101 > result.reverse();
102 > return new DiffAlgorithmResult(result, false);
103 }
104 }
106 class SnakePath {
107 constructor(
108 > public readonly prev: SnakePath | null, myersDiffAlgorithm.ts
109 > public readonly x: number,
110 > public readonly y: number,
111 > public readonly length: number
112 > ) {
113 > }
114 }
115
117 * An array that supports fast negative indices.
118 */
119 > class FastInt32Array { myersDiffAlgorithm.ts
120 > private positiveArr: Int32Array = new Int32Array(10);
121 > private negativeArr: Int32Array = new Int32Array(10);
122
123 get(idx: number): number {
124 > if (idx < 0) { myersDiffAlgorithm.ts
125 > idx = -idx - 1;
126 > return this.negativeArr[idx];
127 > } else {
128 > return this.positiveArr[idx];
129 > }
130 > }
131
132 set(idx: number, value: number): void {
133 > if (idx < 0) { myersDiffAlgorithm.ts
134 > idx = -idx - 1;
135 > if (idx >= this.negativeArr.length) {
136 const arr = this.negativeArr;
137 this.negativeArr = new Int32Array(arr.length * 2);
138 this.negativeArr.set(arr);
139 }
140 > this.negativeArr[idx] = value; myersDiffAlgorithm.ts
141 > } else {
142 > if (idx >= this.positiveArr.length) {
143 const arr = this.positiveArr;
144 this.positiveArr = new Int32Array(arr.length * 2);
145 this.positiveArr.set(arr);
146 }
147 > this.positiveArr[idx] = value; myersDiffAlgorithm.ts
148 > }
149 > }
150 }
151
153 * An array that supports fast negative indices.
154 */
155 > class FastArrayNegativeIndices<T> { myersDiffAlgorithm.ts
156 > private readonly positiveArr: T[] = [];
157 > private readonly negativeArr: T[] = [];
158
159 get(idx: number): T {
160 > if (idx < 0) { myersDiffAlgorithm.ts
161 > idx = -idx - 1;
162 > return this.negativeArr[idx];
163 > } else {
164 > return this.positiveArr[idx];
165 > }
166 > }
167
168 set(idx: number, value: T): void {
169 > if (idx < 0) { myersDiffAlgorithm.ts
170 > idx = -idx - 1;
171 > this.negativeArr[idx] = value;
172 > } else {
173 > this.positiveArr[idx] = value;
174 > }
175 > }
176 }