313
314
public split(startDeltaLine: number, startChar: number, endDeltaLine: number, endChar: number): [SparseMultilineTokensStorage, SparseMultilineTokensStorage, number] {
316
>
const tokenCount = this._tokenCount;
317
>
const aTokens: number[] = [];
318
>
const bTokens: number[] = [];
319
>
let destTokens: number[] = aTokens;
320
>
let destOffset = 0;
321
>
let destFirstDeltaLine: number = 0;
322
>
for (let i = 0; i < tokenCount; i++) {
323
>
const srcOffset = 4 * i;
324
>
const tokenDeltaLine = tokens[srcOffset];
325
>
const tokenStartCharacter = tokens[srcOffset + 1];
326
>
const tokenEndCharacter = tokens[srcOffset + 2];
327
>
const tokenMetadata = tokens[srcOffset + 3];
328
>
329
>
if ((tokenDeltaLine > startDeltaLine || (tokenDeltaLine === startDeltaLine && tokenEndCharacter >= startChar))) {
330
>
if ((tokenDeltaLine < endDeltaLine || (tokenDeltaLine === endDeltaLine && tokenStartCharacter <= endChar))) {
331
// this token is touching the range
332
continue;
334
>
// this token is after the range
335
>
if (destTokens !== bTokens) {
336
>
// this token is the first token after the range
337
>
destTokens = bTokens;
338
>
destOffset = 0;
339
>
destFirstDeltaLine = tokenDeltaLine;
340
>
}
341
>
}
342
>
}
343
>
344
>
destTokens[destOffset++] = tokenDeltaLine - destFirstDeltaLine;
345
>
destTokens[destOffset++] = tokenStartCharacter;
346
>
destTokens[destOffset++] = tokenEndCharacter;
347
>
destTokens[destOffset++] = tokenMetadata;
348
>
}
349
>
350
>
return [new SparseMultilineTokensStorage(new Uint32Array(aTokens)), new SparseMultilineTokensStorage(new Uint32Array(bTokens)), destFirstDeltaLine];
351
>
}
352
353
public acceptDeleteRange(horizontalShiftForFirstLineTokens: number, startDeltaLine: number, startCharacter: number, endDeltaLine: number, endCharacter: number): void {