Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/editor/common/tokens/contiguousMultilineTokensBuilder.ts
3294 views
1
/*---------------------------------------------------------------------------------------------
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 { readUInt32BE, writeUInt32BE } from '../../../base/common/buffer.js';
7
import { ContiguousMultilineTokens } from './contiguousMultilineTokens.js';
8
9
export class ContiguousMultilineTokensBuilder {
10
11
public static deserialize(buff: Uint8Array): ContiguousMultilineTokens[] {
12
let offset = 0;
13
const count = readUInt32BE(buff, offset); offset += 4;
14
const result: ContiguousMultilineTokens[] = [];
15
for (let i = 0; i < count; i++) {
16
offset = ContiguousMultilineTokens.deserialize(buff, offset, result);
17
}
18
return result;
19
}
20
21
private readonly _tokens: ContiguousMultilineTokens[];
22
23
constructor() {
24
this._tokens = [];
25
}
26
27
public add(lineNumber: number, lineTokens: Uint32Array): void {
28
if (this._tokens.length > 0) {
29
const last = this._tokens[this._tokens.length - 1];
30
if (last.endLineNumber + 1 === lineNumber) {
31
// append
32
last.appendLineTokens(lineTokens);
33
return;
34
}
35
}
36
this._tokens.push(new ContiguousMultilineTokens(lineNumber, [lineTokens]));
37
}
38
39
public finalize(): ContiguousMultilineTokens[] {
40
return this._tokens;
41
}
42
43
public serialize(): Uint8Array {
44
const size = this._serializeSize();
45
const result = new Uint8Array(size);
46
this._serialize(result);
47
return result;
48
}
49
50
private _serializeSize(): number {
51
let result = 0;
52
result += 4; // 4 bytes for the count
53
for (let i = 0; i < this._tokens.length; i++) {
54
result += this._tokens[i].serializeSize();
55
}
56
return result;
57
}
58
59
private _serialize(destination: Uint8Array): void {
60
let offset = 0;
61
writeUInt32BE(destination, this._tokens.length, offset); offset += 4;
62
for (let i = 0; i < this._tokens.length; i++) {
63
offset = this._tokens[i].serialize(destination, offset);
64
}
65
}
66
}
67
68