/** * indexed_array.js * purpose: exteds Uint8Array with a currentIndex property */ export class IndexedByteArray extends Uint8Array { /** * The current index of the array * @type {number} */ currentIndex = 0; /** * Creates a new instance of an Uint8Array with a currentIndex property * @param args {any} same as for Uint8Array */ constructor(args) { super(args); } /** * @param start {number?} * @param end {number?} * @returns {IndexedByteArray} */ slice(start, end) { const a = super.slice(start, end); a.currentIndex = 0; return a; } } /** * @param arrs {(IndexedByteArray|Uint8Array)[]} * @returns {IndexedByteArray|Uint8Array} */ export function combineArrays(arrs) { const length = arrs.reduce((sum, current) => sum + current.length, 0); const newArr = new IndexedByteArray(length); let offset = 0; for (const arr of arrs) { newArr.set(arr, offset); offset += arr.length; } return newArr; }