File size: 10,018 Bytes
be5030f
1
{"version":3,"sources":["util/bit.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,+DAA+D;AAC/D,wDAAwD;AACxD,6DAA6D;AAC7D,oDAAoD;AACpD,6DAA6D;AAC7D,6DAA6D;AAC7D,EAAE;AACF,+CAA+C;AAC/C,EAAE;AACF,6DAA6D;AAC7D,8DAA8D;AAC9D,yDAAyD;AACzD,4DAA4D;AAC5D,0DAA0D;AAC1D,qBAAqB;;AAErB,cAAc;AACd,SAAgB,OAAO,CAAC,KAAU,EAAE,MAAc,EAAE,IAAY,EAAE,GAAW;IACzE,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAFD,0BAEC;AAED,cAAc;AACd,SAAgB,MAAM,CAAC,KAAU,EAAE,MAAc,EAAE,IAAY,EAAE,GAAW;IACxE,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAc,CAAC;AAC/C,CAAC;AAFD,wBAEC;AAED,cAAc;AACd,SAAgB,OAAO,CAAC,KAAiB,EAAE,KAAa,EAAE,KAAU;IAChE,OAAO,KAAK,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,IAAK,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QACtD,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAE;AAC9D,CAAC;AAJD,0BAIC;AAED,cAAc;AACd,SAAgB,cAAc,CAAC,MAAc,EAAE,MAAc,EAAE,MAAkB;IAC7E,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,UAAU,GAAG,WAAW,EAAE;QAC/C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1C,uEAAuE;QACvE,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YACvD,kEAAkE;YAClE,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;QAC5F,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAXD,wCAWC;AAED,cAAc;AACd,SAAgB,SAAS,CAAC,MAAqB;IAC3C,IAAI,EAAE,GAAa,EAAE,CAAC;IACtB,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QACxB,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC5B,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE;YACb,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;YACf,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;SAClB;KACJ;IACD,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE;QAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;KAAE;IAC3C,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACV,OAAO,CAAC,CAAC;AACb,CAAC;AAdD,8BAcC;AAED,cAAc;AACd,QAAe,CAAC,CAAC,WAAW,CAAI,KAAiB,EAAE,KAAa,EAAE,MAAc,EAAE,OAAY,EAC9D,GAAkE;IAC9F,IAAI,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;IACpB,IAAI,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAClC,OAAO,SAAS,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE;QAC3B,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9B,GAAG;YACC,MAAM,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;SAC1C,QAAQ,EAAE,SAAS,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE;KAC1C;AACL,CAAC;AAXD,kCAWC;AAED;;;;;GAKG;AACH,cAAc;AACd,SAAgB,gBAAgB,CAAC,IAAgB,EAAE,GAAW,EAAE,GAAW;IACvE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,CAAC;KAAE;IACjC,0EAA0E;IAC1E,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE;QACf,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE;YAC/D,GAAG,IAAI,GAAG,CAAC;SACd;QACD,OAAO,GAAG,CAAC;KACd;IACD,6DAA6D;IAC7D,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,6DAA6D;IAC7D,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO;IACH,wFAAwF;IACxF,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC;QACtC,wFAAwF;QACxF,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC;QACtC,mFAAmF;QACnF,YAAY,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CACnE,CAAC;AACN,CAAC;AAtBD,4CAsBC;AAED,cAAc;AACd,SAAgB,YAAY,CAAC,GAAoB,EAAE,UAAmB,EAAE,UAAmB;IACvF,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,UAAW,GAAG,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACtE,MAAM,GAAG,GAAI,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC;IACvE,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;QACnB,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,GAAG,IAAI,CAAC,CAAC;KACZ;IACD,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;QACnB,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,GAAG,IAAI,CAAC,CAAC;KACZ;IACD,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;QACnB,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,GAAG,IAAI,CAAC,CAAC;KACZ;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAjBD,oCAiBC;AAED,cAAc;AACd,SAAgB,aAAa,CAAC,MAAc;IACxC,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACnB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;IACjC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;AAChE,CAAC;AALD,sCAKC","file":"bit.js","sourcesContent":["// Licensed to the Apache Software Foundation (ASF) under one\n// or more contributor license agreements.  See the NOTICE file\n// distributed with this work for additional information\n// regarding copyright ownership.  The ASF licenses this file\n// to you under the Apache License, Version 2.0 (the\n// \"License\"); you may not use this file except in compliance\n// with the License.  You may obtain a copy of the License at\n//\n//   http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing,\n// software distributed under the License is distributed on an\n// \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n// KIND, either express or implied.  See the License for the\n// specific language governing permissions and limitations\n// under the License.\n\n/** @ignore */\nexport function getBool(_data: any, _index: number, byte: number, bit: number) {\n    return (byte & 1 << bit) !== 0;\n}\n\n/** @ignore */\nexport function getBit(_data: any, _index: number, byte: number, bit: number): 0 | 1 {\n    return (byte & 1 << bit) >> bit as (0 | 1);\n}\n\n/** @ignore */\nexport function setBool(bytes: Uint8Array, index: number, value: any) {\n    return value ?\n        !!(bytes[index >> 3] |=  (1 << (index % 8))) || true :\n        !(bytes[index >> 3] &= ~(1 << (index % 8))) && false ;\n}\n\n/** @ignore */\nexport function truncateBitmap(offset: number, length: number, bitmap: Uint8Array) {\n    const alignedSize = (bitmap.byteLength + 7) & ~7;\n    if (offset > 0 || bitmap.byteLength < alignedSize) {\n        const bytes = new Uint8Array(alignedSize);\n        // If the offset is a multiple of 8 bits, it's safe to slice the bitmap\n        bytes.set(offset % 8 === 0 ? bitmap.subarray(offset >> 3) :\n            // Otherwise iterate each bit from the offset and return a new one\n            packBools(iterateBits(bitmap, offset, length, null, getBool)).subarray(0, alignedSize));\n        return bytes;\n    }\n    return bitmap;\n}\n\n/** @ignore */\nexport function packBools(values: Iterable<any>) {\n    let xs: number[] = [];\n    let i = 0, bit = 0, byte = 0;\n    for (const value of values) {\n        value && (byte |= 1 << bit);\n        if (++bit === 8) {\n            xs[i++] = byte;\n            byte = bit = 0;\n        }\n    }\n    if (i === 0 || bit > 0) { xs[i++] = byte; }\n    let b = new Uint8Array((xs.length + 7) & ~7);\n    b.set(xs);\n    return b;\n}\n\n/** @ignore */\nexport function* iterateBits<T>(bytes: Uint8Array, begin: number, length: number, context: any,\n                                get: (context: any, index: number, byte: number, bit: number) => T) {\n    let bit = begin % 8;\n    let byteIndex = begin >> 3;\n    let index = 0, remaining = length;\n    for (; remaining > 0; bit = 0) {\n        let byte = bytes[byteIndex++];\n        do {\n            yield get(context, index++, byte, bit);\n        } while (--remaining > 0 && ++bit < 8);\n    }\n}\n\n/**\n * Compute the population count (the number of bits set to 1) for a range of bits in a Uint8Array.\n * @param vector The Uint8Array of bits for which to compute the population count.\n * @param lhs The range's left-hand side (or start) bit\n * @param rhs The range's right-hand side (or end) bit\n */\n/** @ignore */\nexport function popcnt_bit_range(data: Uint8Array, lhs: number, rhs: number): number {\n    if (rhs - lhs <= 0) { return 0; }\n    // If the bit range is less than one byte, sum the 1 bits in the bit range\n    if (rhs - lhs < 8) {\n        let sum = 0;\n        for (const bit of iterateBits(data, lhs, rhs - lhs, data, getBit)) {\n            sum += bit;\n        }\n        return sum;\n    }\n    // Get the next lowest multiple of 8 from the right hand side\n    const rhsInside = rhs >> 3 << 3;\n    // Get the next highest multiple of 8 from the left hand side\n    const lhsInside = lhs + (lhs % 8 === 0 ? 0 : 8 - lhs % 8);\n    return (\n        // Get the popcnt of bits between the left hand side, and the next highest multiple of 8\n        popcnt_bit_range(data, lhs, lhsInside) +\n        // Get the popcnt of bits between the right hand side, and the next lowest multiple of 8\n        popcnt_bit_range(data, rhsInside, rhs) +\n        // Get the popcnt of all bits between the left and right hand sides' multiples of 8\n        popcnt_array(data, lhsInside >> 3, (rhsInside - lhsInside) >> 3)\n    );\n}\n\n/** @ignore */\nexport function popcnt_array(arr: ArrayBufferView, byteOffset?: number, byteLength?: number) {\n    let cnt = 0, pos = byteOffset! | 0;\n    const view = new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n    const len =  byteLength === void 0 ? arr.byteLength : pos + byteLength;\n    while (len - pos >= 4) {\n        cnt += popcnt_uint32(view.getUint32(pos));\n        pos += 4;\n    }\n    while (len - pos >= 2) {\n        cnt += popcnt_uint32(view.getUint16(pos));\n        pos += 2;\n    }\n    while (len - pos >= 1) {\n        cnt += popcnt_uint32(view.getUint8(pos));\n        pos += 1;\n    }\n    return cnt;\n}\n\n/** @ignore */\nexport function popcnt_uint32(uint32: number): number {\n    let i = uint32 | 0;\n    i = i - ((i >>> 1) & 0x55555555);\n    i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);\n    return (((i + (i >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;\n}\n"]}