From bcb88d48a6291d568ff635888c272a99aa826000 Mon Sep 17 00:00:00 2001 From: streamich Date: Tue, 7 Oct 2025 22:42:46 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20`.subarray()`=20me?= =?UTF-8?q?thod?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Reader.ts | 7 +++++++ src/StreamingReader.ts | 7 +++++++ src/types.ts | 2 ++ 3 files changed, 16 insertions(+) diff --git a/src/Reader.ts b/src/Reader.ts index 697a524..e7cbbe1 100644 --- a/src/Reader.ts +++ b/src/Reader.ts @@ -45,6 +45,13 @@ export class Reader implements IReader, IReaderResettable { return bin; } + public subarray(start: number = 0, end?: number): Uint8Array { + const x = this.x; + const actualStart = x + start; + const actualEnd = typeof end === 'number' ? x + end : this.end; + return this.uint8.subarray(actualStart, actualEnd); + } + /** * Creates a new {@link Reader} that references the same underlying memory * buffer. But with independent cursor and end. diff --git a/src/StreamingReader.ts b/src/StreamingReader.ts index 28292e3..a64a39e 100644 --- a/src/StreamingReader.ts +++ b/src/StreamingReader.ts @@ -95,6 +95,13 @@ export class StreamingReader implements IReader, IReaderResettable { return bin; } + public subarray(start: number = 0, end?: number): Uint8Array { + const x = this.x; + const actualStart = x + start; + const actualEnd = typeof end === 'number' ? x + end : this.size() + x - start; + return this.uint8.subarray(actualStart, actualEnd); + } + /** * Creates a new {@link Reader} that references the same underlying memory * buffer. But with independent cursor and end. diff --git a/src/types.ts b/src/types.ts index d891134..3ae3713 100644 --- a/src/types.ts +++ b/src/types.ts @@ -91,6 +91,8 @@ export interface IReaderBase { */ cut(size?: number): IReaderBase; + subarray(start?: number, end?: number): Uint8Array; + /** Get current byte value without advancing the cursor. */ peek(): number;