This commit is contained in:
2026-03-25 14:14:07 +01:00
parent d6b31e2ef7
commit a0073b4fb1
10368 changed files with 2214340 additions and 0 deletions

View File

@@ -0,0 +1,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;
}