Path: blob/main/extensions/copilot/src/util/common/variableLengthQuantity.ts
13397 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 { VSBuffer } from '../vs/base/common/buffer';67/** Reads a 32-bit integer from the buffer */8export function readVariableLengthQuantity(buffer: VSBuffer, offset: number): { value: number; consumed: number } {9let result = 0;10let consumed = 0;11let byte: number;1213do {14byte = buffer.readUInt8(offset + consumed);15result |= (byte & 0x7f) << (consumed * 7);16consumed++;17} while (byte & 0x80);1819return { value: result, consumed };20}2122/** Writes a 32 bit integer to the buffer */23export function writeVariableLengthQuantity(i: number): VSBuffer {24if (i !== (i | 0)) {25throw new Error(`${i} is not an int32.`);26}2728const result: number[] = [];29do {30let byte = i & 0x7f;31i >>>= 7;32if (i !== 0) {33byte |= 0x80;34}35result.push(byte);36} while (i !== 0);3738return VSBuffer.fromByteArray(result);39}404142