Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 2 additions & 9 deletions src/reader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,25 @@ export interface RkyvReaderOptions {
*/
export class RkyvReader {
readonly view: DataView;
readonly buffer: Uint8Array;
readonly textDecoder: TextDecoder;

constructor(buffer: ArrayBuffer | Uint8Array, options: RkyvReaderOptions = {}) {
this.textDecoder = options.textDecoder || new TextDecoder();

if (buffer instanceof Uint8Array) {
this.buffer = buffer;
this.view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
} else {
this.buffer = new Uint8Array(buffer);
this.view = new DataView(buffer);
}
}

get length(): number {
return this.buffer.length;
}

/**
* Get the root position for rkyv archives.
* rkyv lays out objects depth-first from leaves to root,
* meaning the root object is at the end of the buffer.
*/
getRootPosition(rootSize: number): number {
return this.length - rootSize;
return this.view.byteLength - rootSize;
}

// === Primitive Type Readers (Little Endian) ===
Expand Down Expand Up @@ -89,7 +82,7 @@ export class RkyvReader {
* Read a raw byte slice from the buffer
*/
readBytes(offset: number, length: number): Uint8Array {
return this.buffer.subarray(offset, offset + length);
return new Uint8Array(this.view.buffer, this.view.byteOffset + offset, length);
}

/**
Expand Down