📄 bufferbuilder.ts
/home/palash/git/site/node_modules/peerjs-js-binarypack/lib/bufferbuilder.ts
Language: ts • Lines: 53
class BufferBuilder {
	private _pieces: number[];
	private readonly _parts: ArrayBufferView[];

	constructor() {
		this._pieces = [];
		this._parts = [];
	}

	append_buffer(data: ArrayBufferView) {
		this.flush();
		this._parts.push(data);
	}

	append(data: number) {
		this._pieces.push(data);
	}

	flush() {
		if (this._pieces.length > 0) {
			const buf = new Uint8Array(this._pieces);
			this._parts.push(buf);
			this._pieces = [];
		}
	}

	private encoder = new TextEncoder();

	public toArrayBuffer() {
		const buffer = [];
		for (const part of this._parts) {
			buffer.push(part);
		}
		return concatArrayBuffers(buffer).buffer;
	}
}

export { BufferBuilder };

function concatArrayBuffers(bufs: ArrayBufferView[]) {
	let size = 0;
	for (const buf of bufs) {
		size += buf.byteLength;
	}
	const result = new Uint8Array(size);
	let offset = 0;
	for (const buf of bufs) {
		const view = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
		result.set(view, offset);
		offset += buf.byteLength;
	}
	return result;
}