From 36226086f05ff1b2e2a8b0a36ffef7def7ec8b69 Mon Sep 17 00:00:00 2001 From: Gorniaky Date: Sat, 17 Oct 2026 14:26:38 -0300 Subject: [PATCH] refactor: reorganize methods in `FlexibleBuffer` and improve clarity --- packages/util/src/FlexibleBuffer.ts | 75 ++++++++++++++--------------- 1 file changed, 37 insertions(+), 38 deletions(-) diff --git a/packages/util/src/FlexibleBuffer.ts b/packages/util/src/FlexibleBuffer.ts index b24e54aa..2c899455 100644 --- a/packages/util/src/FlexibleBuffer.ts +++ b/packages/util/src/FlexibleBuffer.ts @@ -9,10 +9,10 @@ interface IBufferJson { interface IFlexibleBuffer { readonly length: number + clear(): void push(value: ArrayLike): void - toBuffer(): Buffer toArray(): IBufferRawData - clear(): void + toBuffer(): Buffer toJSON(): IBufferJson } @@ -23,82 +23,81 @@ export abstract class FlexibleBuffer implements IFlexibleBuffer { : new ArrayFlexibleBuffer(); } - static flexible(): FlexibleBuffer { return new ArrayFlexibleBuffer(); } - static fixed(size: number): FlexibleBuffer { return new BufferFlexibleBuffer(size); } + static flexible(): FlexibleBuffer { return new ArrayFlexibleBuffer(); } + abstract readonly length: number + abstract clear(): void abstract push(value: ArrayLike): void - abstract toBuffer(): Buffer abstract toArray(): IBufferRawData - abstract clear(): void + abstract toBuffer(): Buffer abstract toJSON(): IBufferJson } -class BufferFlexibleBuffer extends FlexibleBuffer { - constructor(readonly size: number) { - super(); - this._buffer = Buffer.alloc(size); - } - - private readonly _buffer: Buffer; - private _index: number = 0; +class ArrayFlexibleBuffer extends FlexibleBuffer { + private readonly _array: Uint8Array[] = []; + private _length = 0; get length(): number { - return this._index; + return this._length; } - push(value: ArrayLike) { - this._buffer.set(value, this._index); - this._index += value.length; + clear(): void { + this._length = this._array.length = 0; } - toBuffer(): Buffer { - return this._buffer; + push(value: ArrayLike): void { + if (!isUint8Array(value)) value = new Uint8Array(value); + this._array.push(value as Uint8Array); + this._length += value.length; } toArray(): IBufferRawData { return this.toJSON().data; } - clear(): void { - this._buffer.fill(0); - this._index = 0; + toBuffer(): Buffer { + return Buffer.concat(this._array, this._length); } toJSON(): IBufferJson { - return this._buffer.toJSON(); + return this.toBuffer().toJSON(); } } -class ArrayFlexibleBuffer extends FlexibleBuffer { - private readonly _array: Uint8Array[] = []; - private _length = 0; +class BufferFlexibleBuffer extends FlexibleBuffer { + constructor(readonly size: number) { + super(); + this._buffer = Buffer.alloc(size); + } + + private readonly _buffer: Buffer; + private _index: number = 0; get length(): number { - return this._length; + return this._index; } - push(value: ArrayLike): void { - if (!isUint8Array(value)) value = new Uint8Array(value); - this._array.push(value as Uint8Array); - this._length += value.length; + clear(): void { + this._buffer.fill(0); + this._index = 0; } - toBuffer(): Buffer { - return Buffer.concat(this._array, this._length); + push(value: ArrayLike) { + this._buffer.set(value, this._index); + this._index += value.length; } toArray(): IBufferRawData { return this.toJSON().data; } - clear(): void { - this._array.length = 0; - this._length = 0; + toBuffer(): Buffer { + return this._buffer; } toJSON(): IBufferJson { - return this.toBuffer().toJSON(); + return this._buffer.toJSON(); } }