UNPKG

byte-rw

Version:

Byte reader/writer for buffers and streams in typescript/javascript

37 lines (36 loc) 1.24 kB
import { copy } from "../utils/copy.js"; import { DataViewByteWriterChunked } from "./writer-chunked.js"; export class DataViewByteWriterChunkedDynamic extends DataViewByteWriterChunked { combineChunks() { this.complete(); const offsets = new Array(this.chunks.length + 1); offsets[0] = 0; for (let i = 1; i < offsets.length; i++) offsets[i] = offsets[i - 1] + this.chunks[i - 1].bytesWritten; const dst = new ArrayBuffer(offsets.pop()); for (let i = 0; i < offsets.length; i++) { const chunk = this.chunks[i]; copy({ buffer: chunk.view.buffer, byteOffset: chunk.view.byteOffset, byteLength: chunk.bytesWritten }, { buffer: dst, byteOffset: offsets[i], byteLength: chunk.bytesWritten }); } return dst; } constructor(littleEndian, defaultChunkSize = 4096) { super(littleEndian, defaultChunkSize); this.chunks = []; } save() { this.chunks.push({ view: this._dataview, bytesWritten: this._byteOffset }); return this._byteOffset; } }