{"version":3,"file":"util.mjs","names":["subview","data","start","size","length","r","subarray","Error","stringEncode","str","TextEncoder","encode","bitCountU","i","n","bitCountS","bitCountToBytes","bits","over","bitWriter","view","DataView","buffer","byteOffset","byteLength","v","c","b","bI","bitI","byteI","byteV","getUint8","flag","setUint8"],"sources":["../../src/swf/util.ts"],"sourcesContent":["/**\n * Set subview of an existing buffer.\n *\n * @param data Data to get a subview of.\n * @param start Start offset.\n * @param size Subview size.\n * @returns Data subview.\n */\nexport function subview(data: Uint8Array, start: number, size = -1) {\n\tsize = size < 0 ? data.length - start : size;\n\tconst r = data.subarray(start, start + size);\n\tif (r.length < size) {\n\t\tthrow new Error(`Data is too small: ${r.length} < ${size}`);\n\t}\n\treturn r;\n}\n\n/**\n * Encode a string as a C-String.\n *\n * @param str String to be encoded.\n * @returns Encoded string.\n */\nexport function stringEncode(str: string) {\n\treturn new TextEncoder().encode(`${str}\\0`);\n}\n\n/**\n * Get number of bits needed to encode an unsigned integer.\n *\n * @param i Integer, unsigned.\n * @returns The number of bits.\n */\nexport function bitCountU(i: number) {\n\tlet n = 0;\n\t// eslint-disable-next-line no-bitwise\n\tfor (; i; i >>= 1) {\n\t\tn++;\n\t}\n\treturn n;\n}\n\n/**\n * Get number of bits needed to encode a signed integer.\n *\n * @param i Integer, signed.\n * @returns The number of bits.\n */\nexport function bitCountS(i: number) {\n\t// eslint-disable-next-line no-bitwise\n\treturn bitCountU(i < 0 ? i ^ -1 : i) + 1;\n}\n\n/**\n * Get the number of bytes needed to store N bit.\n *\n * @param bits The number of bits.\n * @returns The number of bytes.\n */\nexport function bitCountToBytes(bits: number) {\n\tconst over = bits % 8;\n\treturn (bits - over) / 8 + (over ? 1 : 0);\n}\n\n/**\n * Create a bit writer function for a buffer at offset.\n *\n * @param data The buffer to write bits into.\n * @param start Start offset.\n * @returns Writter function (value, count, offset).\n */\nexport function bitWriter(data: Uint8Array, start = 0) {\n\tconst view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\treturn (v: number, c: number, b: number) => {\n\t\tfor (let i = 0; i < c; i++) {\n\t\t\tconst bI = b + i;\n\t\t\tconst bitI = bI % 8;\n\t\t\tconst byteI = (bI - bitI) / 8;\n\t\t\tlet byteV = view.getUint8(start + byteI);\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\tconst flag = 1 << (7 - bitI);\n\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\tif ((v >> (c - 1 - i)) & 1) {\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tbyteV |= flag;\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tbyteV &= ~flag;\n\t\t\t}\n\t\t\tview.setUint8(start + byteI, byteV);\n\t\t}\n\t};\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,OAAOA,CAACC,IAAgB,EAAEC,KAAa,EAAEC,IAAI,GAAG,CAAC,CAAC,EAAE;EACnEA,IAAI,GAAGA,IAAI,GAAG,CAAC,GAAGF,IAAI,CAACG,MAAM,GAAGF,KAAK,GAAGC,IAAI;EAC5C,MAAME,CAAC,GAAGJ,IAAI,CAACK,QAAQ,CAACJ,KAAK,EAAEA,KAAK,GAAGC,IAAI,CAAC;EAC5C,IAAIE,CAAC,CAACD,MAAM,GAAGD,IAAI,EAAE;IACpB,MAAM,IAAII,KAAK,CAAC,sBAAsBF,CAAC,CAACD,MAAM,MAAMD,IAAI,EAAE,CAAC;EAC5D;EACA,OAAOE,CAAC;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,YAAYA,CAACC,GAAW,EAAE;EACzC,OAAO,IAAIC,WAAW,CAAC,CAAC,CAACC,MAAM,CAAC,GAAGF,GAAG,IAAI,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,SAASA,CAACC,CAAS,EAAE;EACpC,IAAIC,CAAC,GAAG,CAAC;EACT;EACA,OAAOD,CAAC,EAAEA,CAAC,KAAK,CAAC,EAAE;IAClBC,CAAC,EAAE;EACJ;EACA,OAAOA,CAAC;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAACF,CAAS,EAAE;EACpC;EACA,OAAOD,SAAS,CAACC,CAAC,GAAG,CAAC,GAAGA,CAAC,GAAG,CAAC,CAAC,GAAGA,CAAC,CAAC,GAAG,CAAC;AACzC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,eAAeA,CAACC,IAAY,EAAE;EAC7C,MAAMC,IAAI,GAAGD,IAAI,GAAG,CAAC;EACrB,OAAO,CAACA,IAAI,GAAGC,IAAI,IAAI,CAAC,IAAIA,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAAClB,IAAgB,EAAEC,KAAK,GAAG,CAAC,EAAE;EACtD,MAAMkB,IAAI,GAAG,IAAIC,QAAQ,CAACpB,IAAI,CAACqB,MAAM,EAAErB,IAAI,CAACsB,UAAU,EAAEtB,IAAI,CAACuB,UAAU,CAAC;EACxE,OAAO,CAACC,CAAS,EAAEC,CAAS,EAAEC,CAAS,KAAK;IAC3C,KAAK,IAAId,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGa,CAAC,EAAEb,CAAC,EAAE,EAAE;MAC3B,MAAMe,EAAE,GAAGD,CAAC,GAAGd,CAAC;MAChB,MAAMgB,IAAI,GAAGD,EAAE,GAAG,CAAC;MACnB,MAAME,KAAK,GAAG,CAACF,EAAE,GAAGC,IAAI,IAAI,CAAC;MAC7B,IAAIE,KAAK,GAAGX,IAAI,CAACY,QAAQ,CAAC9B,KAAK,GAAG4B,KAAK,CAAC;MACxC;MACA,MAAMG,IAAI,GAAG,CAAC,IAAK,CAAC,GAAGJ,IAAK;MAC5B;MACA,IAAKJ,CAAC,IAAKC,CAAC,GAAG,CAAC,GAAGb,CAAE,GAAI,CAAC,EAAE;QAC3B;QACAkB,KAAK,IAAIE,IAAI;MACd,CAAC,MAAM;QACN;QACAF,KAAK,IAAI,CAACE,IAAI;MACf;MACAb,IAAI,CAACc,QAAQ,CAAChC,KAAK,GAAG4B,KAAK,EAAEC,KAAK,CAAC;IACpC;EACD,CAAC;AACF","ignoreList":[]}