Path: blob/main/src/vs/editor/common/tokens/contiguousMultilineTokensBuilder.ts
3294 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { readUInt32BE, writeUInt32BE } from '../../../base/common/buffer.js';6import { ContiguousMultilineTokens } from './contiguousMultilineTokens.js';78export class ContiguousMultilineTokensBuilder {910public static deserialize(buff: Uint8Array): ContiguousMultilineTokens[] {11let offset = 0;12const count = readUInt32BE(buff, offset); offset += 4;13const result: ContiguousMultilineTokens[] = [];14for (let i = 0; i < count; i++) {15offset = ContiguousMultilineTokens.deserialize(buff, offset, result);16}17return result;18}1920private readonly _tokens: ContiguousMultilineTokens[];2122constructor() {23this._tokens = [];24}2526public add(lineNumber: number, lineTokens: Uint32Array): void {27if (this._tokens.length > 0) {28const last = this._tokens[this._tokens.length - 1];29if (last.endLineNumber + 1 === lineNumber) {30// append31last.appendLineTokens(lineTokens);32return;33}34}35this._tokens.push(new ContiguousMultilineTokens(lineNumber, [lineTokens]));36}3738public finalize(): ContiguousMultilineTokens[] {39return this._tokens;40}4142public serialize(): Uint8Array {43const size = this._serializeSize();44const result = new Uint8Array(size);45this._serialize(result);46return result;47}4849private _serializeSize(): number {50let result = 0;51result += 4; // 4 bytes for the count52for (let i = 0; i < this._tokens.length; i++) {53result += this._tokens[i].serializeSize();54}55return result;56}5758private _serialize(destination: Uint8Array): void {59let offset = 0;60writeUInt32BE(destination, this._tokens.length, offset); offset += 4;61for (let i = 0; i < this._tokens.length; i++) {62offset = this._tokens[i].serialize(destination, offset);63}64}65}666768