1
>
/*---------------------------------------------------------------------------------------------
sparseMultilineTokens.ts
2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { CharCode } from '../../../base/common/charCode.js';
7
>
import { Position } from '../core/position.js';
8
>
import { IRange, Range } from '../core/range.js';
9
>
import { countEOL } from '../core/misc/eolCounter.js';
10
>
import { ITextModel } from '../model.js';
11
>
import { RateLimiter } from './common.js';
12
>
13
>
/**
14
>
* Represents sparse tokens over a contiguous range of lines.
15
>
*/
16
>
export class SparseMultilineTokens {
17
>
18
>
public static create(startLineNumber: number, tokens: Uint32Array): SparseMultilineTokens {
19
>
return new SparseMultilineTokens(startLineNumber, new SparseMultilineTokensStorage(tokens));
20
>
}
21
>
22
>
private _startLineNumber: number;
23
>
private _endLineNumber: number;
24
>
private readonly _tokens: SparseMultilineTokensStorage;
25
>
26
>
/**
27
>
* (Inclusive) start line number for these tokens.
28
>
*/
29
>
public get startLineNumber(): number {
30
return this._startLineNumber;
31
}
33
>
/**
34
>
* (Inclusive) end line number for these tokens.
35
>
*/
36
>
public get endLineNumber(): number {
37
return this._endLineNumber;
38
}
40
>
private constructor(startLineNumber: number, tokens: SparseMultilineTokensStorage) {
41
>
this._startLineNumber = startLineNumber;
42
>
this._tokens = tokens;
43
>
this._endLineNumber = this._startLineNumber + this._tokens.getMaxDeltaLine();
44
>
}
45
>
46
>
public toString(): string {
47
return this._tokens.toString(this._startLineNumber);
48
}
50
>
private _updateEndLineNumber(): void {
51
this._endLineNumber = this._startLineNumber + this._tokens.getMaxDeltaLine();
52
}
54
>
public isEmpty(): boolean {
55
return this._tokens.isEmpty();
56
}
58
>
public getLineTokens(lineNumber: number): SparseLineTokens | null {
59
if (this._startLineNumber <= lineNumber && lineNumber <= this._endLineNumber) {
60
return this._tokens.getLineTokens(lineNumber - this._startLineNumber);