@maplibre/mlt 1.1.7 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/decoding/bigEndianDecode.d.ts +1 -1
  2. package/dist/decoding/bigEndianDecode.js.map +1 -1
  3. package/dist/decoding/decodingTestUtils.d.ts +3 -2
  4. package/dist/decoding/decodingTestUtils.js +21 -22
  5. package/dist/decoding/decodingTestUtils.js.map +1 -1
  6. package/dist/decoding/fastPforDecoder.d.ts +5 -6
  7. package/dist/decoding/fastPforDecoder.js +6 -6
  8. package/dist/decoding/fastPforDecoder.js.map +1 -1
  9. package/dist/decoding/fastPforShared.d.ts +0 -2
  10. package/dist/decoding/fastPforShared.js.map +1 -1
  11. package/dist/decoding/fastPforUnpack.d.ts +23 -23
  12. package/dist/decoding/fastPforUnpack.js.map +1 -1
  13. package/dist/decoding/geometryDecoder.js +41 -41
  14. package/dist/decoding/geometryDecoder.js.map +1 -1
  15. package/dist/decoding/intWrapper.js +0 -1
  16. package/dist/decoding/intWrapper.js.map +1 -1
  17. package/dist/decoding/integerDecodingUtils.d.ts +21 -17
  18. package/dist/decoding/integerDecodingUtils.js +71 -30
  19. package/dist/decoding/integerDecodingUtils.js.map +1 -1
  20. package/dist/decoding/integerStreamDecoder.d.ts +14 -10
  21. package/dist/decoding/integerStreamDecoder.js +150 -63
  22. package/dist/decoding/integerStreamDecoder.js.map +1 -1
  23. package/dist/decoding/propertyDecoder.js +33 -27
  24. package/dist/decoding/propertyDecoder.js.map +1 -1
  25. package/dist/decoding/stringDecoder.d.ts +1 -1
  26. package/dist/decoding/stringDecoder.js +32 -30
  27. package/dist/decoding/stringDecoder.js.map +1 -1
  28. package/dist/decoding/unpackNullableUtils.d.ts +2 -2
  29. package/dist/decoding/unpackNullableUtils.js.map +1 -1
  30. package/dist/encoding/bigEndianEncode.d.ts +1 -1
  31. package/dist/encoding/bigEndianEncode.js.map +1 -1
  32. package/dist/encoding/constGeometryVectorEncoder.js +9 -9
  33. package/dist/encoding/constGeometryVectorEncoder.js.map +1 -1
  34. package/dist/encoding/encodingUtils.d.ts +1 -1
  35. package/dist/encoding/encodingUtils.js +1 -1
  36. package/dist/encoding/encodingUtils.js.map +1 -1
  37. package/dist/encoding/fastPforEncoder.d.ts +4 -5
  38. package/dist/encoding/fastPforEncoder.js +4 -4
  39. package/dist/encoding/fastPforEncoder.js.map +1 -1
  40. package/dist/encoding/integerEncodingUtils.d.ts +14 -14
  41. package/dist/encoding/integerEncodingUtils.js +39 -31
  42. package/dist/encoding/integerEncodingUtils.js.map +1 -1
  43. package/dist/encoding/integerStreamEncoder.d.ts +2 -1
  44. package/dist/encoding/integerStreamEncoder.js +52 -18
  45. package/dist/encoding/integerStreamEncoder.js.map +1 -1
  46. package/dist/encoding/propertyEncoder.js +9 -16
  47. package/dist/encoding/propertyEncoder.js.map +1 -1
  48. package/dist/encoding/stringEncoder.js +9 -42
  49. package/dist/encoding/stringEncoder.js.map +1 -1
  50. package/dist/metadata/tile/logicalStreamType.d.ts +5 -9
  51. package/dist/metadata/tile/logicalStreamType.js +1 -19
  52. package/dist/metadata/tile/logicalStreamType.js.map +1 -1
  53. package/dist/metadata/tile/physicalLevelTechnique.d.ts +1 -5
  54. package/dist/metadata/tile/physicalLevelTechnique.js +0 -4
  55. package/dist/metadata/tile/physicalLevelTechnique.js.map +1 -1
  56. package/dist/metadata/tile/streamMetadataDecoder.d.ts +1 -1
  57. package/dist/metadata/tile/streamMetadataDecoder.js +9 -4
  58. package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
  59. package/dist/mltDecoder.js +25 -29
  60. package/dist/mltDecoder.js.map +1 -1
  61. package/dist/vector/constant/{intConstVector.d.ts → int32ConstVector.d.ts} +2 -2
  62. package/dist/vector/constant/int32ConstVector.js +10 -0
  63. package/dist/vector/constant/int32ConstVector.js.map +1 -0
  64. package/dist/vector/constant/{longConstVector.d.ts → int64ConstVector.d.ts} +2 -2
  65. package/dist/vector/constant/int64ConstVector.js +10 -0
  66. package/dist/vector/constant/int64ConstVector.js.map +1 -0
  67. package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -1
  68. package/dist/vector/dictionary/stringDictionaryVector.js +0 -1
  69. package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
  70. package/dist/vector/featureTable.d.ts +4 -4
  71. package/dist/vector/featureTable.js +9 -14
  72. package/dist/vector/featureTable.js.map +1 -1
  73. package/dist/vector/filter/flatSelectionVector.js +0 -2
  74. package/dist/vector/filter/flatSelectionVector.js.map +1 -1
  75. package/dist/vector/filter/sequenceSelectionVector.js +1 -5
  76. package/dist/vector/filter/sequenceSelectionVector.js.map +1 -1
  77. package/dist/vector/flat/bitVector.js +0 -2
  78. package/dist/vector/flat/bitVector.js.map +1 -1
  79. package/dist/vector/flat/booleanFlatVector.js +0 -1
  80. package/dist/vector/flat/booleanFlatVector.js.map +1 -1
  81. package/dist/vector/flat/{intFlatVector.d.ts → int32FlatVector.d.ts} +1 -1
  82. package/dist/vector/flat/{intFlatVector.js → int32FlatVector.js} +2 -2
  83. package/dist/vector/flat/int32FlatVector.js.map +1 -0
  84. package/dist/vector/flat/{longFlatVector.d.ts → int64FlatVector.d.ts} +1 -1
  85. package/dist/vector/flat/{longFlatVector.js → int64FlatVector.js} +2 -2
  86. package/dist/vector/flat/int64FlatVector.js.map +1 -0
  87. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -1
  88. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +1 -7
  89. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
  90. package/dist/vector/geometry/constGeometryVector.d.ts +3 -3
  91. package/dist/vector/geometry/constGeometryVector.js +0 -2
  92. package/dist/vector/geometry/constGeometryVector.js.map +1 -1
  93. package/dist/vector/geometry/constGpuVector.d.ts +2 -2
  94. package/dist/vector/geometry/constGpuVector.js +0 -2
  95. package/dist/vector/geometry/constGpuVector.js.map +1 -1
  96. package/dist/vector/geometry/flatGeometryVector.d.ts +3 -3
  97. package/dist/vector/geometry/flatGeometryVector.js +1 -5
  98. package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
  99. package/dist/vector/geometry/flatGpuVector.d.ts +2 -2
  100. package/dist/vector/geometry/flatGpuVector.js +0 -1
  101. package/dist/vector/geometry/flatGpuVector.js.map +1 -1
  102. package/dist/vector/geometry/geometryVector.d.ts +3 -3
  103. package/dist/vector/geometry/geometryVector.js +0 -5
  104. package/dist/vector/geometry/geometryVector.js.map +1 -1
  105. package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
  106. package/dist/vector/geometry/gpuVector.d.ts +4 -4
  107. package/dist/vector/geometry/gpuVector.js +0 -4
  108. package/dist/vector/geometry/gpuVector.js.map +1 -1
  109. package/dist/vector/geometry/topologyVector.d.ts +3 -3
  110. package/dist/vector/geometry/topologyVector.js.map +1 -1
  111. package/dist/vector/idVector.d.ts +8 -0
  112. package/dist/vector/idVector.js +2 -0
  113. package/dist/vector/idVector.js.map +1 -0
  114. package/dist/vector/sequence/{intSequenceVector.d.ts → int32SequenceVector.d.ts} +1 -1
  115. package/dist/vector/sequence/{intSequenceVector.js → int32SequenceVector.js} +2 -2
  116. package/dist/vector/sequence/int32SequenceVector.js.map +1 -0
  117. package/dist/vector/sequence/{longSequenceVector.d.ts → int64SequenceVector.d.ts} +1 -1
  118. package/dist/vector/sequence/{longSequenceVector.js → int64SequenceVector.js} +2 -2
  119. package/dist/vector/sequence/int64SequenceVector.js.map +1 -0
  120. package/dist/vector/sequence/sequenceVector.js +0 -1
  121. package/dist/vector/sequence/sequenceVector.js.map +1 -1
  122. package/dist/vector/variableSizeVector.js +0 -1
  123. package/dist/vector/variableSizeVector.js.map +1 -1
  124. package/dist/vector/vector.js +0 -4
  125. package/dist/vector/vector.js.map +1 -1
  126. package/package.json +7 -7
  127. package/dist/vector/constant/intConstVector.js +0 -10
  128. package/dist/vector/constant/intConstVector.js.map +0 -1
  129. package/dist/vector/constant/longConstVector.js +0 -10
  130. package/dist/vector/constant/longConstVector.js.map +0 -1
  131. package/dist/vector/flat/intFlatVector.js.map +0 -1
  132. package/dist/vector/flat/longFlatVector.js.map +0 -1
  133. package/dist/vector/intVector.d.ts +0 -8
  134. package/dist/vector/intVector.js +0 -2
  135. package/dist/vector/intVector.js.map +0 -1
  136. package/dist/vector/sequence/intSequenceVector.js.map +0 -1
  137. package/dist/vector/sequence/longSequenceVector.js.map +0 -1
@@ -10,4 +10,4 @@
10
10
  * @returns Number of int32 words written.
11
11
  * @throws RangeError If `(offset, byteLength)` is out of bounds, or if `out` is too small.
12
12
  */
13
- export declare function decodeBigEndianInt32sInto(bytes: Uint8Array, offset: number, byteLength: number, out: Int32Array): number;
13
+ export declare function decodeBigEndianInt32sInto(bytes: Uint8Array, offset: number, byteLength: number, out: Uint32Array): number;
@@ -1 +1 @@
1
- {"version":3,"file":"bigEndianDecode.js","sourceRoot":"","sources":["../../src/decoding/bigEndianDecode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CACrC,KAAiB,EACjB,MAAc,EACd,UAAkB,EAClB,GAAe;IAEf,IAAI,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACrE,MAAM,IAAI,UAAU,CAChB,oDAAoD,MAAM,gBAAgB,UAAU,kBAAkB,KAAK,CAAC,MAAM,GAAG,CACxH,CAAC;IACN,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;IAEzE,IAAI,GAAG,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAAC,yCAAyC,GAAG,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;YAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1G,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,GAAG,eAAe,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,UAAU,GAAG,eAAe,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC","sourcesContent":["import { bswap32 } from \"./fastPforShared\";\n\n/**\n * Decodes big-endian bytes into `out` without allocating the output buffer.\n *\n * This function does not copy `bytes`; it writes decoded words into the provided `out` array.\n * For aligned inputs it may create a temporary typed-array view (`Uint32Array`) over `bytes.buffer`\n * to speed up decoding.\n *\n * If `byteLength` is not a multiple of 4, the final word is padded with zeros.\n *\n * @returns Number of int32 words written.\n * @throws RangeError If `(offset, byteLength)` is out of bounds, or if `out` is too small.\n */\nexport function decodeBigEndianInt32sInto(\n bytes: Uint8Array,\n offset: number,\n byteLength: number,\n out: Int32Array,\n): number {\n if (offset < 0 || byteLength < 0 || offset + byteLength > bytes.length) {\n throw new RangeError(\n `decodeBigEndianInt32sInto: out of bounds (offset=${offset}, byteLength=${byteLength}, bytes.length=${bytes.length})`,\n );\n }\n\n const numCompleteInts = Math.floor(byteLength / 4);\n const hasTrailingBytes = byteLength % 4 !== 0;\n const numInts = hasTrailingBytes ? numCompleteInts + 1 : numCompleteInts;\n\n if (out.length < numInts) {\n throw new RangeError(`decodeBigEndianInt32sInto: out.length=${out.length} < ${numInts}`);\n }\n\n if (numCompleteInts > 0) {\n const absoluteOffset = bytes.byteOffset + offset;\n if ((absoluteOffset & 3) === 0) {\n const u32 = new Uint32Array(bytes.buffer, absoluteOffset, numCompleteInts);\n for (let i = 0; i < numCompleteInts; i++) {\n out[i] = bswap32(u32[i]) | 0;\n }\n } else {\n for (let i = 0; i < numCompleteInts; i++) {\n const base = offset + i * 4;\n out[i] = (bytes[base] << 24) | (bytes[base + 1] << 16) | (bytes[base + 2] << 8) | bytes[base + 3] | 0;\n }\n }\n }\n\n if (hasTrailingBytes) {\n const base = offset + numCompleteInts * 4;\n const remaining = byteLength - numCompleteInts * 4;\n let v = 0;\n for (let i = 0; i < remaining; i++) {\n v |= bytes[base + i] << (24 - i * 8);\n }\n out[numCompleteInts] = v | 0;\n }\n\n return numInts;\n}\n"]}
1
+ {"version":3,"file":"bigEndianDecode.js","sourceRoot":"","sources":["../../src/decoding/bigEndianDecode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CACrC,KAAiB,EACjB,MAAc,EACd,UAAkB,EAClB,GAAgB;IAEhB,IAAI,MAAM,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACrE,MAAM,IAAI,UAAU,CAChB,oDAAoD,MAAM,gBAAgB,UAAU,kBAAkB,KAAK,CAAC,MAAM,GAAG,CACxH,CAAC;IACN,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;IAEzE,IAAI,GAAG,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAAC,yCAAyC,GAAG,CAAC,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;YAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1G,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,GAAG,eAAe,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,UAAU,GAAG,eAAe,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC","sourcesContent":["import { bswap32 } from \"./fastPforShared\";\n\n/**\n * Decodes big-endian bytes into `out` without allocating the output buffer.\n *\n * This function does not copy `bytes`; it writes decoded words into the provided `out` array.\n * For aligned inputs it may create a temporary typed-array view (`Uint32Array`) over `bytes.buffer`\n * to speed up decoding.\n *\n * If `byteLength` is not a multiple of 4, the final word is padded with zeros.\n *\n * @returns Number of int32 words written.\n * @throws RangeError If `(offset, byteLength)` is out of bounds, or if `out` is too small.\n */\nexport function decodeBigEndianInt32sInto(\n bytes: Uint8Array,\n offset: number,\n byteLength: number,\n out: Uint32Array,\n): number {\n if (offset < 0 || byteLength < 0 || offset + byteLength > bytes.length) {\n throw new RangeError(\n `decodeBigEndianInt32sInto: out of bounds (offset=${offset}, byteLength=${byteLength}, bytes.length=${bytes.length})`,\n );\n }\n\n const numCompleteInts = Math.floor(byteLength / 4);\n const hasTrailingBytes = byteLength % 4 !== 0;\n const numInts = hasTrailingBytes ? numCompleteInts + 1 : numCompleteInts;\n\n if (out.length < numInts) {\n throw new RangeError(`decodeBigEndianInt32sInto: out.length=${out.length} < ${numInts}`);\n }\n\n if (numCompleteInts > 0) {\n const absoluteOffset = bytes.byteOffset + offset;\n if ((absoluteOffset & 3) === 0) {\n const u32 = new Uint32Array(bytes.buffer, absoluteOffset, numCompleteInts);\n for (let i = 0; i < numCompleteInts; i++) {\n out[i] = bswap32(u32[i]) | 0;\n }\n } else {\n for (let i = 0; i < numCompleteInts; i++) {\n const base = offset + i * 4;\n out[i] = (bytes[base] << 24) | (bytes[base + 1] << 16) | (bytes[base + 2] << 8) | bytes[base + 3] | 0;\n }\n }\n }\n\n if (hasTrailingBytes) {\n const base = offset + numCompleteInts * 4;\n const remaining = byteLength - numCompleteInts * 4;\n let v = 0;\n for (let i = 0; i < remaining; i++) {\n v |= bytes[base + i] << (24 - i * 8);\n }\n out[numCompleteInts] = v | 0;\n }\n\n return numInts;\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  import { PhysicalStreamType } from "../metadata/tile/physicalStreamType";
2
- import { LogicalStreamType } from "../metadata/tile/logicalStreamType";
3
2
  import { LogicalLevelTechnique } from "../metadata/tile/logicalLevelTechnique";
4
3
  import { PhysicalLevelTechnique } from "../metadata/tile/physicalLevelTechnique";
5
4
  import { DictionaryType } from "../metadata/tile/dictionaryType";
6
- import type { RleEncodedStreamMetadata, StreamMetadata } from "../metadata/tile/streamMetadataDecoder";
7
5
  import { type Column } from "../metadata/tileset/tilesetMetadata";
6
+ import type { RleEncodedStreamMetadata, StreamMetadata } from "../metadata/tile/streamMetadataDecoder";
7
+ import type { LogicalStreamType } from "../metadata/tile/logicalStreamType";
8
8
  /**
9
9
  * Creates basic stream metadata with logical techniques.
10
10
  */
@@ -19,6 +19,7 @@ export declare function createRleMetadata(logicalTechnique1: LogicalLevelTechniq
19
19
  export declare function createColumnMetadataForStruct(columnName: string, childFields: Array<{
20
20
  name: string;
21
21
  type?: number;
22
+ nullable?: boolean;
22
23
  }>): Column;
23
24
  /**
24
25
  * Creates a single stream with metadata and data.
@@ -1,5 +1,4 @@
1
1
  import { PhysicalStreamType } from "../metadata/tile/physicalStreamType";
2
- import { LogicalStreamType } from "../metadata/tile/logicalStreamType";
3
2
  import { LogicalLevelTechnique } from "../metadata/tile/logicalLevelTechnique";
4
3
  import { PhysicalLevelTechnique } from "../metadata/tile/physicalLevelTechnique";
5
4
  import { DictionaryType } from "../metadata/tile/dictionaryType";
@@ -15,7 +14,7 @@ import { encodeVarintInt32Value, encodeVarintInt32 } from "../encoding/integerEn
15
14
  export function createStreamMetadata(logicalTechnique1, logicalTechnique2 = LogicalLevelTechnique.NONE, numValues = 3) {
16
15
  return {
17
16
  physicalStreamType: PhysicalStreamType.DATA,
18
- logicalStreamType: new LogicalStreamType(DictionaryType.NONE),
17
+ logicalStreamType: { dictionaryType: DictionaryType.NONE },
19
18
  logicalLevelTechnique1: logicalTechnique1,
20
19
  logicalLevelTechnique2: logicalTechnique2,
21
20
  physicalLevelTechnique: PhysicalLevelTechnique.VARINT,
@@ -30,7 +29,7 @@ export function createStreamMetadata(logicalTechnique1, logicalTechnique2 = Logi
30
29
  export function createRleMetadata(logicalTechnique1, logicalTechnique2, runs, numRleValues) {
31
30
  return {
32
31
  physicalStreamType: PhysicalStreamType.DATA,
33
- logicalStreamType: new LogicalStreamType(DictionaryType.NONE),
32
+ logicalStreamType: { dictionaryType: DictionaryType.NONE },
34
33
  logicalLevelTechnique1: logicalTechnique1,
35
34
  logicalLevelTechnique2: logicalTechnique2,
36
35
  physicalLevelTechnique: PhysicalLevelTechnique.VARINT,
@@ -47,7 +46,7 @@ export function createRleMetadata(logicalTechnique1, logicalTechnique2, runs, nu
47
46
  export function createColumnMetadataForStruct(columnName, childFields) {
48
47
  const children = childFields.map((fieldConfig) => ({
49
48
  name: fieldConfig.name,
50
- nullable: true,
49
+ nullable: fieldConfig.nullable ?? true,
51
50
  scalarField: {
52
51
  physicalType: fieldConfig.type ?? ScalarType.STRING,
53
52
  type: "physicalType",
@@ -72,7 +71,7 @@ export function createStream(physicalType, data, options = {}) {
72
71
  const count = options.count ?? 0;
73
72
  return buildEncodedStream({
74
73
  physicalStreamType: physicalType,
75
- logicalStreamType: options.logical ?? new LogicalStreamType(),
74
+ logicalStreamType: options.logical ?? {},
76
75
  logicalLevelTechnique1: LogicalLevelTechnique.NONE,
77
76
  logicalLevelTechnique2: LogicalLevelTechnique.NONE,
78
77
  physicalLevelTechnique: options.technique ?? PhysicalLevelTechnique.NONE,
@@ -88,30 +87,30 @@ export function createStream(physicalType, data, options = {}) {
88
87
  */
89
88
  export function encodeFsstStrings() {
90
89
  const symbolTable = new Uint8Array([99, 97, 116, 100, 111, 103]); // "catdog"
91
- const symbolLengths = new Int32Array([3, 3]);
90
+ const symbolLengths = new Uint32Array([3, 3]);
92
91
  const compressedDictionary = new Uint8Array([0, 1]);
93
- const dictionaryLengths = new Int32Array([3, 3]);
94
- const offsets = new Int32Array([0, 1, 0]); // "cat", "dog", "cat"
92
+ const dictionaryLengths = new Uint32Array([3, 3]);
93
+ const offsets = new Uint32Array([0, 1, 0]); // "cat", "dog", "cat"
95
94
  const numValues = 3;
96
95
  return concatenateBuffers(createStream(PhysicalStreamType.PRESENT, encodeBooleanRle(new Array(numValues).fill(true)), {
97
96
  technique: PhysicalLevelTechnique.VARINT,
98
97
  count: numValues,
99
98
  }), createStream(PhysicalStreamType.DATA, symbolTable, {
100
- logical: new LogicalStreamType(DictionaryType.FSST),
99
+ logical: { dictionaryType: DictionaryType.FSST },
101
100
  }), createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(symbolLengths), {
102
- logical: new LogicalStreamType(undefined, undefined, LengthType.SYMBOL),
101
+ logical: { lengthType: LengthType.SYMBOL },
103
102
  technique: PhysicalLevelTechnique.VARINT,
104
103
  count: symbolLengths.length,
105
104
  }), createStream(PhysicalStreamType.OFFSET, encodeVarintInt32(offsets), {
106
- logical: new LogicalStreamType(undefined, OffsetType.STRING),
105
+ logical: { offsetType: OffsetType.STRING },
107
106
  technique: PhysicalLevelTechnique.VARINT,
108
107
  count: offsets.length,
109
108
  }), createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(dictionaryLengths), {
110
- logical: new LogicalStreamType(undefined, undefined, LengthType.DICTIONARY),
109
+ logical: { lengthType: LengthType.DICTIONARY },
111
110
  technique: PhysicalLevelTechnique.VARINT,
112
111
  count: dictionaryLengths.length,
113
112
  }), createStream(PhysicalStreamType.DATA, compressedDictionary, {
114
- logical: new LogicalStreamType(DictionaryType.SINGLE),
113
+ logical: { dictionaryType: DictionaryType.SINGLE },
115
114
  }));
116
115
  }
117
116
  /**
@@ -124,25 +123,25 @@ export function encodeSharedDictionary(dictionaryStrings, options = {}) {
124
123
  const { useFsst = false, dictionaryType = DictionaryType.SHARED } = options;
125
124
  const encodedDictionary = encodeStrings(dictionaryStrings);
126
125
  const dictionaryLengths = createStringLengths(dictionaryStrings);
127
- const lengthStream = createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(new Int32Array(dictionaryLengths)), {
128
- logical: new LogicalStreamType(undefined, undefined, LengthType.DICTIONARY),
126
+ const lengthStream = createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(new Uint32Array(dictionaryLengths)), {
127
+ logical: { lengthType: LengthType.DICTIONARY },
129
128
  technique: PhysicalLevelTechnique.VARINT,
130
129
  count: dictionaryLengths.length,
131
130
  });
132
131
  const dataStream = createStream(PhysicalStreamType.DATA, encodedDictionary, {
133
- logical: new LogicalStreamType(dictionaryType),
132
+ logical: { dictionaryType: dictionaryType },
134
133
  count: encodedDictionary.length,
135
134
  });
136
135
  if (useFsst) {
137
136
  const symbolTable = new Uint8Array([99, 97, 116, 100, 111, 103]); // "catdog"
138
- const symbolLengths = new Int32Array([3, 3]);
137
+ const symbolLengths = new Uint32Array([3, 3]);
139
138
  const symbolLengthStream = createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(symbolLengths), {
140
- logical: new LogicalStreamType(undefined, undefined, LengthType.SYMBOL),
139
+ logical: { lengthType: LengthType.SYMBOL },
141
140
  technique: PhysicalLevelTechnique.VARINT,
142
141
  count: symbolLengths.length,
143
142
  });
144
143
  const symbolDataStream = createStream(PhysicalStreamType.DATA, symbolTable, {
145
- logical: new LogicalStreamType(DictionaryType.FSST),
144
+ logical: { dictionaryType: DictionaryType.FSST },
146
145
  count: symbolTable.length,
147
146
  });
148
147
  return { lengthStream, dataStream, symbolLengthStream, symbolDataStream };
@@ -174,7 +173,7 @@ function encodeNumStreams(numStreams) {
174
173
  function createPresentStream(presentValues) {
175
174
  const metadata = {
176
175
  physicalStreamType: PhysicalStreamType.PRESENT,
177
- logicalStreamType: new LogicalStreamType(DictionaryType.NONE),
176
+ logicalStreamType: { dictionaryType: DictionaryType.NONE },
178
177
  logicalLevelTechnique1: LogicalLevelTechnique.NONE,
179
178
  logicalLevelTechnique2: LogicalLevelTechnique.NONE,
180
179
  physicalLevelTechnique: PhysicalLevelTechnique.VARINT,
@@ -187,7 +186,7 @@ function createPresentStream(presentValues) {
187
186
  function createOffsetStream(offsetIndices) {
188
187
  const metadata = {
189
188
  physicalStreamType: PhysicalStreamType.OFFSET,
190
- logicalStreamType: new LogicalStreamType(undefined, OffsetType.STRING),
189
+ logicalStreamType: { offsetType: OffsetType.STRING },
191
190
  logicalLevelTechnique1: LogicalLevelTechnique.NONE,
192
191
  logicalLevelTechnique2: LogicalLevelTechnique.NONE,
193
192
  physicalLevelTechnique: PhysicalLevelTechnique.VARINT,
@@ -195,7 +194,7 @@ function createOffsetStream(offsetIndices) {
195
194
  byteLength: 0,
196
195
  decompressedCount: offsetIndices.length,
197
196
  };
198
- return buildEncodedStream(metadata, encodeVarintInt32(new Int32Array(offsetIndices)));
197
+ return buildEncodedStream(metadata, encodeVarintInt32(new Uint32Array(offsetIndices)));
199
198
  }
200
199
  /**
201
200
  * Builds a complete encoded stream by combining metadata and data.
@@ -1 +1 @@
1
- {"version":3,"file":"decodingTestUtils.js","sourceRoot":"","sources":["../../src/decoding/decodingTestUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { LogicalStreamType } from \"../metadata/tile/logicalStreamType\";\nimport { LogicalLevelTechnique } from \"../metadata/tile/logicalLevelTechnique\";\nimport { PhysicalLevelTechnique } from \"../metadata/tile/physicalLevelTechnique\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { OffsetType } from \"../metadata/tile/offsetType\";\nimport type { RleEncodedStreamMetadata, StreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport IntWrapper from \"./intWrapper\";\nimport { type Column, type Field, ComplexType, ScalarType } from \"../metadata/tileset/tilesetMetadata\";\nimport { encodeBooleanRle, encodeStrings, createStringLengths } from \"../encoding/encodingUtils\";\nimport { encodeVarintInt32Value, encodeVarintInt32 } from \"../encoding/integerEncodingUtils\";\n\n/**\n * Creates basic stream metadata with logical techniques.\n */\nexport function createStreamMetadata(\n logicalTechnique1: LogicalLevelTechnique,\n logicalTechnique2: LogicalLevelTechnique = LogicalLevelTechnique.NONE,\n numValues = 3,\n): StreamMetadata {\n return {\n physicalStreamType: PhysicalStreamType.DATA,\n logicalStreamType: new LogicalStreamType(DictionaryType.NONE),\n logicalLevelTechnique1: logicalTechnique1,\n logicalLevelTechnique2: logicalTechnique2,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues,\n byteLength: 10,\n decompressedCount: numValues,\n };\n}\n\n/**\n * Creates RLE-encoded stream metadata.\n */\nexport function createRleMetadata(\n logicalTechnique1: LogicalLevelTechnique,\n logicalTechnique2: LogicalLevelTechnique,\n runs: number,\n numRleValues: number,\n): RleEncodedStreamMetadata {\n return {\n physicalStreamType: PhysicalStreamType.DATA,\n logicalStreamType: new LogicalStreamType(DictionaryType.NONE),\n logicalLevelTechnique1: logicalTechnique1,\n logicalLevelTechnique2: logicalTechnique2,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues: runs * 2,\n byteLength: 10,\n decompressedCount: numRleValues,\n runs,\n numRleValues,\n };\n}\n\n/**\n * Creates column metadata for STRUCT type columns.\n */\nexport function createColumnMetadataForStruct(\n columnName: string,\n childFields: Array<{ name: string; type?: number }>,\n): Column {\n const children: Field[] = childFields.map((fieldConfig) => ({\n name: fieldConfig.name,\n nullable: true,\n scalarField: {\n physicalType: fieldConfig.type ?? ScalarType.STRING,\n type: \"physicalType\" as const,\n },\n type: \"scalarField\" as const,\n }));\n\n return {\n name: columnName,\n nullable: false,\n complexType: {\n physicalType: ComplexType.STRUCT,\n children,\n type: \"physicalType\" as const,\n },\n type: \"complexType\" as const,\n };\n}\n\n/**\n * Creates a single stream with metadata and data.\n */\nexport function createStream(\n physicalType: PhysicalStreamType,\n data: Uint8Array,\n options: {\n logical?: LogicalStreamType;\n technique?: PhysicalLevelTechnique;\n count?: number;\n } = {},\n): Uint8Array {\n const count = options.count ?? 0;\n return buildEncodedStream(\n {\n physicalStreamType: physicalType,\n logicalStreamType: options.logical ?? new LogicalStreamType(),\n logicalLevelTechnique1: LogicalLevelTechnique.NONE,\n logicalLevelTechnique2: LogicalLevelTechnique.NONE,\n physicalLevelTechnique: options.technique ?? PhysicalLevelTechnique.NONE,\n numValues: count,\n byteLength: data.length,\n decompressedCount: count,\n },\n data,\n );\n}\n\n/**\n * Encodes FSST-compressed strings into a complete stream.\n * This uses hardcoded test data: [\"cat\", \"dog\", \"cat\"]\n * @returns Encoded Uint8Array that can be passed to decodeString\n */\nexport function encodeFsstStrings(): Uint8Array {\n const symbolTable = new Uint8Array([99, 97, 116, 100, 111, 103]); // \"catdog\"\n const symbolLengths = new Int32Array([3, 3]);\n const compressedDictionary = new Uint8Array([0, 1]);\n const dictionaryLengths = new Int32Array([3, 3]);\n const offsets = new Int32Array([0, 1, 0]); // \"cat\", \"dog\", \"cat\"\n const numValues = 3;\n\n return concatenateBuffers(\n createStream(PhysicalStreamType.PRESENT, encodeBooleanRle(new Array(numValues).fill(true)), {\n technique: PhysicalLevelTechnique.VARINT,\n count: numValues,\n }),\n createStream(PhysicalStreamType.DATA, symbolTable, {\n logical: new LogicalStreamType(DictionaryType.FSST),\n }),\n createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(symbolLengths), {\n logical: new LogicalStreamType(undefined, undefined, LengthType.SYMBOL),\n technique: PhysicalLevelTechnique.VARINT,\n count: symbolLengths.length,\n }),\n createStream(PhysicalStreamType.OFFSET, encodeVarintInt32(offsets), {\n logical: new LogicalStreamType(undefined, OffsetType.STRING),\n technique: PhysicalLevelTechnique.VARINT,\n count: offsets.length,\n }),\n createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(dictionaryLengths), {\n logical: new LogicalStreamType(undefined, undefined, LengthType.DICTIONARY),\n technique: PhysicalLevelTechnique.VARINT,\n count: dictionaryLengths.length,\n }),\n createStream(PhysicalStreamType.DATA, compressedDictionary, {\n logical: new LogicalStreamType(DictionaryType.SINGLE),\n }),\n );\n}\n\n/**\n * Encodes a shared dictionary for struct fields.\n * @param dictionaryStrings - Array of unique strings in the dictionary\n * @param options - Encoding options\n * @returns Object containing length and data streams\n */\nexport function encodeSharedDictionary(\n dictionaryStrings: string[],\n options: { useFsst?: boolean; dictionaryType?: DictionaryType } = {},\n): {\n lengthStream: Uint8Array;\n dataStream: Uint8Array;\n symbolLengthStream?: Uint8Array;\n symbolDataStream?: Uint8Array;\n} {\n const { useFsst = false, dictionaryType = DictionaryType.SHARED } = options;\n\n const encodedDictionary = encodeStrings(dictionaryStrings);\n const dictionaryLengths = createStringLengths(dictionaryStrings);\n\n const lengthStream = createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(new Int32Array(dictionaryLengths)), {\n logical: new LogicalStreamType(undefined, undefined, LengthType.DICTIONARY),\n technique: PhysicalLevelTechnique.VARINT,\n count: dictionaryLengths.length,\n });\n\n const dataStream = createStream(PhysicalStreamType.DATA, encodedDictionary, {\n logical: new LogicalStreamType(dictionaryType),\n count: encodedDictionary.length,\n });\n\n if (useFsst) {\n const symbolTable = new Uint8Array([99, 97, 116, 100, 111, 103]); // \"catdog\"\n const symbolLengths = new Int32Array([3, 3]);\n\n const symbolLengthStream = createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(symbolLengths), {\n logical: new LogicalStreamType(undefined, undefined, LengthType.SYMBOL),\n technique: PhysicalLevelTechnique.VARINT,\n count: symbolLengths.length,\n });\n\n const symbolDataStream = createStream(PhysicalStreamType.DATA, symbolTable, {\n logical: new LogicalStreamType(DictionaryType.FSST),\n count: symbolTable.length,\n });\n\n return { lengthStream, dataStream, symbolLengthStream, symbolDataStream };\n }\n\n return { lengthStream, dataStream };\n}\n\n/**\n * Encodes streams for a struct field.\n * @param offsetIndices - Indices into the shared dictionary\n * @param presentValues - Boolean array indicating which values are present\n * @param isPresent - Whether the field itself is present\n * @returns Encoded streams for the field\n */\nexport function encodeStructField(offsetIndices: number[], presentValues: boolean[], isPresent = true): Uint8Array {\n if (!isPresent) {\n return encodeNumStreams(0);\n }\n\n const numStreamsEncoded = encodeNumStreams(2);\n const encodedPresent = createPresentStream(presentValues);\n const encodedOffsets = createOffsetStream(offsetIndices);\n\n return concatenateBuffers(numStreamsEncoded, encodedPresent, encodedOffsets);\n}\n\nfunction encodeNumStreams(numStreams: number): Uint8Array {\n const buffer = new Uint8Array(5);\n const offset = new IntWrapper(0);\n encodeVarintInt32Value(numStreams, buffer, offset);\n return buffer.slice(0, offset.get());\n}\n\nfunction createPresentStream(presentValues: boolean[]): Uint8Array {\n const metadata = {\n physicalStreamType: PhysicalStreamType.PRESENT,\n logicalStreamType: new LogicalStreamType(DictionaryType.NONE),\n logicalLevelTechnique1: LogicalLevelTechnique.NONE,\n logicalLevelTechnique2: LogicalLevelTechnique.NONE,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues: presentValues.length,\n byteLength: 0,\n decompressedCount: presentValues.length,\n };\n return buildEncodedStream(metadata, encodeBooleanRle(presentValues));\n}\n\nfunction createOffsetStream(offsetIndices: number[]): Uint8Array {\n const metadata = {\n physicalStreamType: PhysicalStreamType.OFFSET,\n logicalStreamType: new LogicalStreamType(undefined, OffsetType.STRING),\n logicalLevelTechnique1: LogicalLevelTechnique.NONE,\n logicalLevelTechnique2: LogicalLevelTechnique.NONE,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues: offsetIndices.length,\n byteLength: 0,\n decompressedCount: offsetIndices.length,\n };\n return buildEncodedStream(metadata, encodeVarintInt32(new Int32Array(offsetIndices)));\n}\n\n/**\n * Builds a complete encoded stream by combining metadata and data.\n */\nexport function buildEncodedStream(\n streamMetadata: StreamMetadata | RleEncodedStreamMetadata,\n encodedData: Uint8Array,\n): Uint8Array {\n const updatedMetadata = {\n ...streamMetadata,\n byteLength: encodedData.length,\n };\n\n const metadataBuffer = encodeStreamMetadata(updatedMetadata);\n const result = new Uint8Array(metadataBuffer.length + encodedData.length);\n result.set(metadataBuffer, 0);\n result.set(encodedData, metadataBuffer.length);\n\n return result;\n}\n\n/**\n * Encodes stream metadata into binary format.\n * - Byte 1: Stream type (physical type in upper 4 bits, logical subtype in lower 4 bits)\n * - Byte 2: Encodings (llt1[5-7], llt2[2-4], plt[0-1])\n * - Varints: numValues, byteLength\n * - If RLE: Varints: runs, numRleValues\n */\nexport function encodeStreamMetadata(metadata: StreamMetadata | RleEncodedStreamMetadata): Uint8Array {\n const buffer = new Uint8Array(100);\n let writeOffset = 0;\n\n // Byte 1: Stream type\n buffer[writeOffset++] = encodeStreamTypeByte(metadata);\n\n // Byte 2: Encoding techniques\n buffer[writeOffset++] = encodeEncodingsByte(metadata);\n\n // Variable-length fields\n const offset = new IntWrapper(writeOffset);\n encodeVarintInt32Value(metadata.numValues, buffer, offset);\n encodeVarintInt32Value(metadata.byteLength, buffer, offset);\n\n // RLE-specific fields\n if (isRleMetadata(metadata)) {\n encodeVarintInt32Value(metadata.runs, buffer, offset);\n encodeVarintInt32Value(metadata.numRleValues, buffer, offset);\n }\n\n return buffer.slice(0, offset.get());\n}\n\nfunction encodeStreamTypeByte(metadata: StreamMetadata | RleEncodedStreamMetadata): number {\n const physicalTypeIndex = Object.values(PhysicalStreamType).indexOf(metadata.physicalStreamType);\n const lowerNibble = getLogicalSubtypeValue(metadata);\n return (physicalTypeIndex << 4) | lowerNibble;\n}\n\nfunction getLogicalSubtypeValue(metadata: StreamMetadata | RleEncodedStreamMetadata): number {\n const { physicalStreamType, logicalStreamType } = metadata;\n\n switch (physicalStreamType) {\n case PhysicalStreamType.DATA:\n return logicalStreamType.dictionaryType !== undefined\n ? Object.values(DictionaryType).indexOf(logicalStreamType.dictionaryType)\n : 0;\n case PhysicalStreamType.OFFSET:\n return logicalStreamType.offsetType !== undefined\n ? Object.values(OffsetType).indexOf(logicalStreamType.offsetType)\n : 0;\n case PhysicalStreamType.LENGTH:\n return logicalStreamType.lengthType !== undefined\n ? Object.values(LengthType).indexOf(logicalStreamType.lengthType)\n : 0;\n default:\n return 0;\n }\n}\n\nfunction encodeEncodingsByte(metadata: StreamMetadata | RleEncodedStreamMetadata): number {\n const llt1Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique1);\n const llt2Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique2);\n const pltIndex = Object.values(PhysicalLevelTechnique).indexOf(metadata.physicalLevelTechnique);\n return (llt1Index << 5) | (llt2Index << 2) | pltIndex;\n}\n\nfunction isRleMetadata(metadata: StreamMetadata | RleEncodedStreamMetadata): metadata is RleEncodedStreamMetadata {\n return \"runs\" in metadata && \"numRleValues\" in metadata;\n}\n\n/**\n * Concatenates multiple Uint8Array buffers into a single buffer.\n */\nexport function concatenateBuffers(...buffers: Uint8Array[]): Uint8Array {\n const totalLength = buffers.reduce((sum, buf) => sum + buf.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n\n for (const buffer of buffers) {\n result.set(buffer, offset);\n offset += buffer.length;\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"decodingTestUtils.js","sourceRoot":"","sources":["../../src/decoding/decodingTestUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { LogicalLevelTechnique } from \"../metadata/tile/logicalLevelTechnique\";\nimport { PhysicalLevelTechnique } from \"../metadata/tile/physicalLevelTechnique\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { OffsetType } from \"../metadata/tile/offsetType\";\nimport IntWrapper from \"./intWrapper\";\nimport { type Column, type Field, ComplexType, ScalarType } from \"../metadata/tileset/tilesetMetadata\";\nimport { encodeBooleanRle, encodeStrings, createStringLengths } from \"../encoding/encodingUtils\";\nimport { encodeVarintInt32Value, encodeVarintInt32 } from \"../encoding/integerEncodingUtils\";\nimport type { RleEncodedStreamMetadata, StreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport type { LogicalStreamType } from \"../metadata/tile/logicalStreamType\";\n\n/**\n * Creates basic stream metadata with logical techniques.\n */\nexport function createStreamMetadata(\n logicalTechnique1: LogicalLevelTechnique,\n logicalTechnique2: LogicalLevelTechnique = LogicalLevelTechnique.NONE,\n numValues = 3,\n): StreamMetadata {\n return {\n physicalStreamType: PhysicalStreamType.DATA,\n logicalStreamType: { dictionaryType: DictionaryType.NONE },\n logicalLevelTechnique1: logicalTechnique1,\n logicalLevelTechnique2: logicalTechnique2,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues,\n byteLength: 10,\n decompressedCount: numValues,\n };\n}\n\n/**\n * Creates RLE-encoded stream metadata.\n */\nexport function createRleMetadata(\n logicalTechnique1: LogicalLevelTechnique,\n logicalTechnique2: LogicalLevelTechnique,\n runs: number,\n numRleValues: number,\n): RleEncodedStreamMetadata {\n return {\n physicalStreamType: PhysicalStreamType.DATA,\n logicalStreamType: { dictionaryType: DictionaryType.NONE },\n logicalLevelTechnique1: logicalTechnique1,\n logicalLevelTechnique2: logicalTechnique2,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues: runs * 2,\n byteLength: 10,\n decompressedCount: numRleValues,\n runs,\n numRleValues,\n };\n}\n\n/**\n * Creates column metadata for STRUCT type columns.\n */\nexport function createColumnMetadataForStruct(\n columnName: string,\n childFields: Array<{ name: string; type?: number; nullable?: boolean }>,\n): Column {\n const children: Field[] = childFields.map((fieldConfig) => ({\n name: fieldConfig.name,\n nullable: fieldConfig.nullable ?? true,\n scalarField: {\n physicalType: fieldConfig.type ?? ScalarType.STRING,\n type: \"physicalType\" as const,\n },\n type: \"scalarField\" as const,\n }));\n\n return {\n name: columnName,\n nullable: false,\n complexType: {\n physicalType: ComplexType.STRUCT,\n children,\n type: \"physicalType\" as const,\n },\n type: \"complexType\" as const,\n };\n}\n\n/**\n * Creates a single stream with metadata and data.\n */\nexport function createStream(\n physicalType: PhysicalStreamType,\n data: Uint8Array,\n options: {\n logical?: LogicalStreamType;\n technique?: PhysicalLevelTechnique;\n count?: number;\n } = {},\n): Uint8Array {\n const count = options.count ?? 0;\n return buildEncodedStream(\n {\n physicalStreamType: physicalType,\n logicalStreamType: options.logical ?? {},\n logicalLevelTechnique1: LogicalLevelTechnique.NONE,\n logicalLevelTechnique2: LogicalLevelTechnique.NONE,\n physicalLevelTechnique: options.technique ?? PhysicalLevelTechnique.NONE,\n numValues: count,\n byteLength: data.length,\n decompressedCount: count,\n },\n data,\n );\n}\n\n/**\n * Encodes FSST-compressed strings into a complete stream.\n * This uses hardcoded test data: [\"cat\", \"dog\", \"cat\"]\n * @returns Encoded Uint8Array that can be passed to decodeString\n */\nexport function encodeFsstStrings(): Uint8Array {\n const symbolTable = new Uint8Array([99, 97, 116, 100, 111, 103]); // \"catdog\"\n const symbolLengths = new Uint32Array([3, 3]);\n const compressedDictionary = new Uint8Array([0, 1]);\n const dictionaryLengths = new Uint32Array([3, 3]);\n const offsets = new Uint32Array([0, 1, 0]); // \"cat\", \"dog\", \"cat\"\n const numValues = 3;\n\n return concatenateBuffers(\n createStream(PhysicalStreamType.PRESENT, encodeBooleanRle(new Array(numValues).fill(true)), {\n technique: PhysicalLevelTechnique.VARINT,\n count: numValues,\n }),\n createStream(PhysicalStreamType.DATA, symbolTable, {\n logical: { dictionaryType: DictionaryType.FSST },\n }),\n createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(symbolLengths), {\n logical: { lengthType: LengthType.SYMBOL },\n technique: PhysicalLevelTechnique.VARINT,\n count: symbolLengths.length,\n }),\n createStream(PhysicalStreamType.OFFSET, encodeVarintInt32(offsets), {\n logical: { offsetType: OffsetType.STRING },\n technique: PhysicalLevelTechnique.VARINT,\n count: offsets.length,\n }),\n createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(dictionaryLengths), {\n logical: { lengthType: LengthType.DICTIONARY },\n technique: PhysicalLevelTechnique.VARINT,\n count: dictionaryLengths.length,\n }),\n createStream(PhysicalStreamType.DATA, compressedDictionary, {\n logical: { dictionaryType: DictionaryType.SINGLE },\n }),\n );\n}\n\n/**\n * Encodes a shared dictionary for struct fields.\n * @param dictionaryStrings - Array of unique strings in the dictionary\n * @param options - Encoding options\n * @returns Object containing length and data streams\n */\nexport function encodeSharedDictionary(\n dictionaryStrings: string[],\n options: { useFsst?: boolean; dictionaryType?: DictionaryType } = {},\n): {\n lengthStream: Uint8Array;\n dataStream: Uint8Array;\n symbolLengthStream?: Uint8Array;\n symbolDataStream?: Uint8Array;\n} {\n const { useFsst = false, dictionaryType = DictionaryType.SHARED } = options;\n\n const encodedDictionary = encodeStrings(dictionaryStrings);\n const dictionaryLengths = createStringLengths(dictionaryStrings);\n\n const lengthStream = createStream(\n PhysicalStreamType.LENGTH,\n encodeVarintInt32(new Uint32Array(dictionaryLengths)),\n {\n logical: { lengthType: LengthType.DICTIONARY },\n technique: PhysicalLevelTechnique.VARINT,\n count: dictionaryLengths.length,\n },\n );\n\n const dataStream = createStream(PhysicalStreamType.DATA, encodedDictionary, {\n logical: { dictionaryType: dictionaryType },\n count: encodedDictionary.length,\n });\n\n if (useFsst) {\n const symbolTable = new Uint8Array([99, 97, 116, 100, 111, 103]); // \"catdog\"\n const symbolLengths = new Uint32Array([3, 3]);\n\n const symbolLengthStream = createStream(PhysicalStreamType.LENGTH, encodeVarintInt32(symbolLengths), {\n logical: { lengthType: LengthType.SYMBOL },\n technique: PhysicalLevelTechnique.VARINT,\n count: symbolLengths.length,\n });\n\n const symbolDataStream = createStream(PhysicalStreamType.DATA, symbolTable, {\n logical: { dictionaryType: DictionaryType.FSST },\n count: symbolTable.length,\n });\n\n return { lengthStream, dataStream, symbolLengthStream, symbolDataStream };\n }\n\n return { lengthStream, dataStream };\n}\n\n/**\n * Encodes streams for a struct field.\n * @param offsetIndices - Indices into the shared dictionary\n * @param presentValues - Boolean array indicating which values are present\n * @param isPresent - Whether the field itself is present\n * @returns Encoded streams for the field\n */\nexport function encodeStructField(offsetIndices: number[], presentValues: boolean[], isPresent = true): Uint8Array {\n if (!isPresent) {\n return encodeNumStreams(0);\n }\n\n const numStreamsEncoded = encodeNumStreams(2);\n const encodedPresent = createPresentStream(presentValues);\n const encodedOffsets = createOffsetStream(offsetIndices);\n\n return concatenateBuffers(numStreamsEncoded, encodedPresent, encodedOffsets);\n}\n\nfunction encodeNumStreams(numStreams: number): Uint8Array {\n const buffer = new Uint8Array(5);\n const offset = new IntWrapper(0);\n encodeVarintInt32Value(numStreams, buffer, offset);\n return buffer.slice(0, offset.get());\n}\n\nfunction createPresentStream(presentValues: boolean[]): Uint8Array {\n const metadata = {\n physicalStreamType: PhysicalStreamType.PRESENT,\n logicalStreamType: { dictionaryType: DictionaryType.NONE },\n logicalLevelTechnique1: LogicalLevelTechnique.NONE,\n logicalLevelTechnique2: LogicalLevelTechnique.NONE,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues: presentValues.length,\n byteLength: 0,\n decompressedCount: presentValues.length,\n };\n return buildEncodedStream(metadata, encodeBooleanRle(presentValues));\n}\n\nfunction createOffsetStream(offsetIndices: number[]): Uint8Array {\n const metadata = {\n physicalStreamType: PhysicalStreamType.OFFSET,\n logicalStreamType: { offsetType: OffsetType.STRING },\n logicalLevelTechnique1: LogicalLevelTechnique.NONE,\n logicalLevelTechnique2: LogicalLevelTechnique.NONE,\n physicalLevelTechnique: PhysicalLevelTechnique.VARINT,\n numValues: offsetIndices.length,\n byteLength: 0,\n decompressedCount: offsetIndices.length,\n };\n return buildEncodedStream(metadata, encodeVarintInt32(new Uint32Array(offsetIndices)));\n}\n\n/**\n * Builds a complete encoded stream by combining metadata and data.\n */\nexport function buildEncodedStream(\n streamMetadata: StreamMetadata | RleEncodedStreamMetadata,\n encodedData: Uint8Array,\n): Uint8Array {\n const updatedMetadata = {\n ...streamMetadata,\n byteLength: encodedData.length,\n };\n\n const metadataBuffer = encodeStreamMetadata(updatedMetadata);\n const result = new Uint8Array(metadataBuffer.length + encodedData.length);\n result.set(metadataBuffer, 0);\n result.set(encodedData, metadataBuffer.length);\n\n return result;\n}\n\n/**\n * Encodes stream metadata into binary format.\n * - Byte 1: Stream type (physical type in upper 4 bits, logical subtype in lower 4 bits)\n * - Byte 2: Encodings (llt1[5-7], llt2[2-4], plt[0-1])\n * - Varints: numValues, byteLength\n * - If RLE: Varints: runs, numRleValues\n */\nexport function encodeStreamMetadata(metadata: StreamMetadata | RleEncodedStreamMetadata): Uint8Array {\n const buffer = new Uint8Array(100);\n let writeOffset = 0;\n\n // Byte 1: Stream type\n buffer[writeOffset++] = encodeStreamTypeByte(metadata);\n\n // Byte 2: Encoding techniques\n buffer[writeOffset++] = encodeEncodingsByte(metadata);\n\n // Variable-length fields\n const offset = new IntWrapper(writeOffset);\n encodeVarintInt32Value(metadata.numValues, buffer, offset);\n encodeVarintInt32Value(metadata.byteLength, buffer, offset);\n\n // RLE-specific fields\n if (isRleMetadata(metadata)) {\n encodeVarintInt32Value(metadata.runs, buffer, offset);\n encodeVarintInt32Value(metadata.numRleValues, buffer, offset);\n }\n\n return buffer.slice(0, offset.get());\n}\n\nfunction encodeStreamTypeByte(metadata: StreamMetadata | RleEncodedStreamMetadata): number {\n const physicalTypeIndex = Object.values(PhysicalStreamType).indexOf(metadata.physicalStreamType);\n const lowerNibble = getLogicalSubtypeValue(metadata);\n return (physicalTypeIndex << 4) | lowerNibble;\n}\n\nfunction getLogicalSubtypeValue(metadata: StreamMetadata | RleEncodedStreamMetadata): number {\n const { physicalStreamType, logicalStreamType } = metadata;\n\n switch (physicalStreamType) {\n case PhysicalStreamType.DATA:\n return logicalStreamType.dictionaryType !== undefined\n ? Object.values(DictionaryType).indexOf(logicalStreamType.dictionaryType)\n : 0;\n case PhysicalStreamType.OFFSET:\n return logicalStreamType.offsetType !== undefined\n ? Object.values(OffsetType).indexOf(logicalStreamType.offsetType)\n : 0;\n case PhysicalStreamType.LENGTH:\n return logicalStreamType.lengthType !== undefined\n ? Object.values(LengthType).indexOf(logicalStreamType.lengthType)\n : 0;\n default:\n return 0;\n }\n}\n\nfunction encodeEncodingsByte(metadata: StreamMetadata | RleEncodedStreamMetadata): number {\n const llt1Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique1);\n const llt2Index = Object.values(LogicalLevelTechnique).indexOf(metadata.logicalLevelTechnique2);\n const pltIndex = Object.values(PhysicalLevelTechnique).indexOf(metadata.physicalLevelTechnique);\n return (llt1Index << 5) | (llt2Index << 2) | pltIndex;\n}\n\nfunction isRleMetadata(metadata: StreamMetadata | RleEncodedStreamMetadata): metadata is RleEncodedStreamMetadata {\n return \"runs\" in metadata && \"numRleValues\" in metadata;\n}\n\n/**\n * Concatenates multiple Uint8Array buffers into a single buffer.\n */\nexport function concatenateBuffers(...buffers: Uint8Array[]): Uint8Array {\n const totalLength = buffers.reduce((sum, buf) => sum + buf.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n\n for (const buffer of buffers) {\n result.set(buffer, offset);\n offset += buffer.length;\n }\n\n return result;\n}\n"]}
@@ -1,4 +1,3 @@
1
- import { type Int32Buf, type Uint8Buf } from "./fastPforShared";
2
1
  /**
3
2
  * FastPFOR decoding implementation.
4
3
  *
@@ -11,9 +10,9 @@ import { type Int32Buf, type Uint8Buf } from "./fastPforShared";
11
10
  * Workspace for the FastPFOR decoder.
12
11
  */
13
12
  export type FastPforDecoderWorkspace = {
14
- dataToBePacked: Array<Int32Array | undefined>;
13
+ dataToBePacked: Array<Uint32Array>;
15
14
  dataPointers: Int32Array;
16
- byteContainer: Uint8Buf;
15
+ byteContainer: Uint8Array;
17
16
  byteContainerI32?: Int32Array;
18
17
  exceptionSizes: Int32Array;
19
18
  };
@@ -28,7 +27,7 @@ export type FastPforDecoderWorkspace = {
28
27
  * The caller is responsible for creating and reusing this object.
29
28
  */
30
29
  export type FastPforWireDecodeWorkspace = {
31
- encodedWords: Int32Array;
30
+ encodedWords: Uint32Array;
32
31
  decoderWorkspace: FastPforDecoderWorkspace;
33
32
  };
34
33
  /**
@@ -37,7 +36,7 @@ export type FastPforWireDecodeWorkspace = {
37
36
  */
38
37
  export declare function createDecoderWorkspace(): FastPforDecoderWorkspace;
39
38
  export declare function createFastPforWireDecodeWorkspace(initialEncodedWordCapacity?: number): FastPforWireDecodeWorkspace;
40
- export declare function ensureFastPforWireEncodedWordsCapacity(workspace: FastPforWireDecodeWorkspace, requiredWordCount: number): Int32Array;
39
+ export declare function ensureFastPforWireEncodedWordsCapacity(workspace: FastPforWireDecodeWorkspace, requiredWordCount: number): Uint32Array;
41
40
  /**
42
41
  * Decodes a sequence of FastPFOR-encoded integers.
43
42
  *
@@ -45,4 +44,4 @@ export declare function ensureFastPforWireEncodedWordsCapacity(workspace: FastPf
45
44
  * @param numValues The number of integers expected to be decoded.
46
45
  * @param workspace Optional workspace for reuse across calls. If omitted, a new workspace is created per call.
47
46
  */
48
- export declare function decodeFastPforInt32(encoded: Int32Buf, numValues: number, workspace?: FastPforDecoderWorkspace): Int32Array;
47
+ export declare function decodeFastPforInt32(encoded: Uint32Array, numValues: number, workspace?: FastPforDecoderWorkspace): Uint32Array;
@@ -24,14 +24,14 @@ export function createFastPforWireDecodeWorkspace(initialEncodedWordCapacity = 1
24
24
  }
25
25
  const capacity = Math.max(16, initialEncodedWordCapacity | 0);
26
26
  return {
27
- encodedWords: new Int32Array(capacity),
27
+ encodedWords: new Uint32Array(capacity),
28
28
  decoderWorkspace: createDecoderWorkspace(),
29
29
  };
30
30
  }
31
31
  export function ensureFastPforWireEncodedWordsCapacity(workspace, requiredWordCount) {
32
32
  if (requiredWordCount <= workspace.encodedWords.length)
33
33
  return workspace.encodedWords;
34
- const next = new Int32Array(Math.max(16, requiredWordCount * 2));
34
+ const next = new Uint32Array(Math.max(16, requiredWordCount * 2));
35
35
  workspace.encodedWords = next;
36
36
  return next;
37
37
  }
@@ -102,7 +102,7 @@ function unpackExceptionStreams(inValues, inExcept, workspace) {
102
102
  }
103
103
  let exceptionStream = dataToBePacked[bitWidth];
104
104
  if (!exceptionStream || exceptionStream.length < roundedUp) {
105
- exceptionStream = dataToBePacked[bitWidth] = new Int32Array(roundedUp);
105
+ exceptionStream = dataToBePacked[bitWidth] = new Uint32Array(roundedUp);
106
106
  }
107
107
  let j = 0;
108
108
  for (; j < size; j = (j + 32) | 0) {
@@ -385,13 +385,13 @@ function decodeVByte(inValues, inPos, inLength, out, outPos, expectedCount) {
385
385
  export function decodeFastPforInt32(encoded, numValues, workspace) {
386
386
  let inPos = 0;
387
387
  let outPos = 0;
388
- const decoded = new Int32Array(numValues);
388
+ const decoded = new Uint32Array(numValues);
389
389
  const decoderWorkspace = workspace ?? createDecoderWorkspace();
390
390
  if (encoded.length > 0) {
391
391
  const alignedLength = encoded[inPos] | 0;
392
392
  inPos = (inPos + 1) | 0;
393
- if (alignedLength < 0 || (alignedLength & (BLOCK_SIZE - 1)) !== 0) {
394
- throw new Error(`FastPFOR decode: invalid alignedLength=${alignedLength} (expected >= 0 and multiple of ${BLOCK_SIZE})`);
393
+ if ((alignedLength & (BLOCK_SIZE - 1)) !== 0) {
394
+ throw new Error(`FastPFOR decode: invalid alignedLength=${alignedLength} (expected multiple of ${BLOCK_SIZE})`);
395
395
  }
396
396
  if (outPos + alignedLength > decoded.length) {
397
397
  throw new Error(`FastPFOR decode: output buffer too small (outPos=${outPos}, alignedLength=${alignedLength}, out.length=${decoded.length})`);
@@ -1 +1 @@
1
- {"version":3,"file":"fastPforDecoder.js","sourceRoot":"","sources":["../../src/decoding/fastPforDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MASKS,\n DEFAULT_PAGE_SIZE,\n BLOCK_SIZE,\n greatestMultiple,\n roundUpToMultipleOf32,\n normalizePageSize,\n type Int32Buf,\n type Uint8Buf,\n} from \"./fastPforShared\";\nimport {\n fastUnpack32_2,\n fastUnpack32_3,\n fastUnpack32_4,\n fastUnpack32_5,\n fastUnpack32_6,\n fastUnpack32_7,\n fastUnpack32_8,\n fastUnpack32_9,\n fastUnpack32_10,\n fastUnpack32_11,\n fastUnpack32_12,\n fastUnpack32_16,\n fastUnpack256_1,\n fastUnpack256_2,\n fastUnpack256_3,\n fastUnpack256_4,\n fastUnpack256_5,\n fastUnpack256_6,\n fastUnpack256_7,\n fastUnpack256_8,\n fastUnpack256_16,\n fastUnpack256_Generic,\n} from \"./fastPforUnpack\";\n\n/**\n * FastPFOR decoding implementation.\n *\n * @remarks\n * Terminology note: \"exceptions\" in FastPFOR refer to **outlier values** within a block that do not fit in the\n * chosen base bit-width for that block. These are stored in separate \"exception streams\" and later applied back\n * to the unpacked base values. This is unrelated to JavaScript/TypeScript runtime exceptions.\n */\n\n/**\n * Workspace for the FastPFOR decoder.\n */\nexport type FastPforDecoderWorkspace = {\n dataToBePacked: Array<Int32Array | undefined>;\n dataPointers: Int32Array;\n byteContainer: Uint8Buf;\n byteContainerI32?: Int32Array;\n exceptionSizes: Int32Array;\n};\n\n/**\n * Workspace for decoding the FastPFOR *wire format* (big-endian int32 words).\n *\n * @remarks\n * This workspace owns:\n * - a scratch `encodedWords` buffer to materialize big-endian words\n * - the reusable `FastPforDecoderWorkspace` used by `decodeFastPforInt32`\n *\n * The caller is responsible for creating and reusing this object.\n */\nexport type FastPforWireDecodeWorkspace = {\n encodedWords: Int32Array;\n decoderWorkspace: FastPforDecoderWorkspace;\n};\n\nconst MAX_BIT_WIDTH = 32;\nconst BIT_WIDTH_SLOTS = MAX_BIT_WIDTH + 1;\n\nconst PAGE_SIZE = normalizePageSize(DEFAULT_PAGE_SIZE);\nconst BYTE_CONTAINER_SIZE = ((3 * PAGE_SIZE) / BLOCK_SIZE + PAGE_SIZE) | 0;\n\n/**\n * Creates an isolated workspace for decoding.\n * Reusing a workspace across calls avoids repeated allocations.\n */\nexport function createDecoderWorkspace(): FastPforDecoderWorkspace {\n const byteContainer = new Uint8Array(BYTE_CONTAINER_SIZE) as Uint8Buf;\n return {\n dataToBePacked: new Array(BIT_WIDTH_SLOTS),\n dataPointers: new Int32Array(BIT_WIDTH_SLOTS),\n byteContainer,\n byteContainerI32: new Int32Array(\n byteContainer.buffer,\n byteContainer.byteOffset,\n byteContainer.byteLength >>> 2,\n ),\n exceptionSizes: new Int32Array(BIT_WIDTH_SLOTS),\n };\n}\n\nexport function createFastPforWireDecodeWorkspace(\n initialEncodedWordCapacity: number = 16,\n): FastPforWireDecodeWorkspace {\n if (initialEncodedWordCapacity < 0) {\n throw new RangeError(`initialEncodedWordCapacity must be >= 0, got ${initialEncodedWordCapacity}`);\n }\n\n const capacity = Math.max(16, initialEncodedWordCapacity | 0);\n return {\n encodedWords: new Int32Array(capacity),\n decoderWorkspace: createDecoderWorkspace(),\n };\n}\n\nexport function ensureFastPforWireEncodedWordsCapacity(\n workspace: FastPforWireDecodeWorkspace,\n requiredWordCount: number,\n): Int32Array {\n if (requiredWordCount <= workspace.encodedWords.length) return workspace.encodedWords;\n\n const next = new Int32Array(Math.max(16, requiredWordCount * 2));\n workspace.encodedWords = next;\n return next;\n}\n\nfunction materializeByteContainer(\n inValues: Int32Array,\n byteContainerStart: number,\n byteSize: number,\n workspace: FastPforDecoderWorkspace,\n): Uint8Buf {\n if (workspace.byteContainer.length < byteSize) {\n workspace.byteContainer = new Uint8Array(byteSize * 2) as Uint8Buf;\n workspace.byteContainerI32 = undefined;\n }\n const byteContainer = workspace.byteContainer;\n const numFullInts = byteSize >>> 2;\n\n if ((byteContainer.byteOffset & 3) === 0) {\n let intView = workspace.byteContainerI32;\n if (\n !intView ||\n intView.buffer !== byteContainer.buffer ||\n intView.byteOffset !== byteContainer.byteOffset ||\n intView.length < numFullInts\n ) {\n intView = workspace.byteContainerI32 = new Int32Array(\n byteContainer.buffer,\n byteContainer.byteOffset,\n byteContainer.byteLength >>> 2,\n );\n }\n\n intView.set(inValues.subarray(byteContainerStart, byteContainerStart + numFullInts));\n } else {\n for (let i = 0; i < numFullInts; i = (i + 1) | 0) {\n const val = inValues[(byteContainerStart + i) | 0] | 0;\n const base = i << 2;\n byteContainer[base] = val & 0xff;\n byteContainer[(base + 1) | 0] = (val >>> 8) & 0xff;\n byteContainer[(base + 2) | 0] = (val >>> 16) & 0xff;\n byteContainer[(base + 3) | 0] = (val >>> 24) & 0xff;\n }\n }\n\n const remainder = byteSize & 3;\n if (remainder > 0) {\n const lastIntIdx = (byteContainerStart + numFullInts) | 0;\n const lastVal = inValues[lastIntIdx] | 0;\n const base = numFullInts << 2;\n for (let r = 0; r < remainder; r = (r + 1) | 0) {\n byteContainer[(base + r) | 0] = (lastVal >>> (r << 3)) & 0xff;\n }\n }\n\n return byteContainer;\n}\n\n/**\n * Unpacks the per-bitWidth \"exception streams\" described by the page's bitmap.\n *\n * @remarks\n * For each bit-width present in the bitmap, a stream header gives the count of outlier values for that\n * bit-width, followed by packed bits representing those values.\n *\n * @param inValues - Packed input (32-bit words).\n * @param inExcept - Offset (32-bit word index) where the exception bitmap starts.\n * @param workspace - Decoder workspace used to store the unpacked exception streams.\n * @returns The new input offset (32-bit word index) after consuming all exception streams.\n */\nfunction unpackExceptionStreams(inValues: Int32Array, inExcept: number, workspace: FastPforDecoderWorkspace): number {\n const bitmap = inValues[inExcept++] | 0;\n const dataToBePacked = workspace.dataToBePacked;\n\n for (let bitWidth = 2; bitWidth <= MAX_BIT_WIDTH; bitWidth = (bitWidth + 1) | 0) {\n if (((bitmap >>> (bitWidth - 1)) & 1) === 0) continue;\n\n if (inExcept >= inValues.length) {\n throw new Error(\n `FastPFOR decode: truncated exception stream header (bitWidth=${bitWidth}, streamWordIndex=${inExcept}, needWords=1, availableWords=${inValues.length - inExcept}, encodedWords=${inValues.length})`,\n );\n }\n const size = inValues[inExcept++] >>> 0;\n const roundedUp = roundUpToMultipleOf32(size);\n\n const wordsNeeded = (size * bitWidth + 31) >>> 5;\n if (inExcept + wordsNeeded > inValues.length) {\n throw new Error(\n `FastPFOR decode: truncated exception stream (bitWidth=${bitWidth}, size=${size}, streamWordIndex=${inExcept}, needWords=${wordsNeeded}, availableWords=${inValues.length - inExcept}, encodedWords=${inValues.length})`,\n );\n }\n\n let exceptionStream = dataToBePacked[bitWidth];\n if (!exceptionStream || exceptionStream.length < roundedUp) {\n exceptionStream = dataToBePacked[bitWidth] = new Int32Array(roundedUp);\n }\n\n let j = 0;\n for (; j < size; j = (j + 32) | 0) {\n fastUnpack32(inValues, inExcept, exceptionStream, j, bitWidth);\n inExcept = (inExcept + bitWidth) | 0;\n }\n\n const overflow = (j - size) | 0;\n inExcept = (inExcept - ((overflow * bitWidth) >>> 5)) | 0;\n\n workspace.exceptionSizes[bitWidth] = size;\n }\n\n return inExcept;\n}\n\n/**\n * Unpacks one 256-value block from the packed bitstream using a specialized implementation for common widths.\n *\n * @param inValues - Packed input (32-bit words).\n * @param inPos - Input offset (32-bit word index) where the packed block starts.\n * @param out - Output buffer.\n * @param outPos - Output offset where the 256 values will be written.\n * @param bitWidth - Base bit-width used for this block.\n * @returns The new input offset (32-bit word index) right after the packed block data.\n */\nfunction unpackBlock256(\n inValues: Int32Array,\n inPos: number,\n out: Int32Array,\n outPos: number,\n bitWidth: number,\n): number {\n switch (bitWidth) {\n case 1:\n fastUnpack256_1(inValues, inPos, out, outPos);\n break;\n case 2:\n fastUnpack256_2(inValues, inPos, out, outPos);\n break;\n case 3:\n fastUnpack256_3(inValues, inPos, out, outPos);\n break;\n case 4:\n fastUnpack256_4(inValues, inPos, out, outPos);\n break;\n case 5:\n fastUnpack256_5(inValues, inPos, out, outPos);\n break;\n case 6:\n fastUnpack256_6(inValues, inPos, out, outPos);\n break;\n case 7:\n fastUnpack256_7(inValues, inPos, out, outPos);\n break;\n case 8:\n fastUnpack256_8(inValues, inPos, out, outPos);\n break;\n case 16:\n fastUnpack256_16(inValues, inPos, out, outPos);\n break;\n default:\n fastUnpack256_Generic(inValues, inPos, out, outPos, bitWidth);\n break;\n }\n\n return (inPos + (bitWidth << 3)) | 0;\n}\n\n/**\n * Reads and validates the 2-byte block header from the byteContainer.\n *\n * @remarks\n * The header is `[bitWidth, exceptionCount]`, both stored as single bytes.\n *\n * @param byteContainer - Byte metadata buffer for the page.\n * @param byteContainerLen - The valid byte length in `byteContainer` for this page.\n * @param bytePosIn - Current offset in `byteContainer`.\n * @param block - Block index within the page (for error messages).\n * @returns The parsed header and the updated `bytePosIn`.\n */\nfunction readBlockHeader(\n byteContainer: Uint8Array,\n byteContainerLen: number,\n bytePosIn: number,\n block: number,\n): { bitWidth: number; exceptionCount: number; bytePosIn: number } {\n if (bytePosIn + 2 > byteContainerLen) {\n throw new Error(\n `FastPFOR decode: byteContainer underflow at block=${block} (need 2 bytes for [bitWidth, exceptionCount], bytePos=${bytePosIn}, byteSize=${byteContainerLen})`,\n );\n }\n\n const bitWidth = byteContainer[bytePosIn++];\n const exceptionCount = byteContainer[bytePosIn++];\n\n if (bitWidth > MAX_BIT_WIDTH) {\n throw new Error(\n `FastPFOR decode: invalid bitWidth=${bitWidth} at block=${block} (expected 0..${MAX_BIT_WIDTH}). This likely indicates corrupted or truncated input.`,\n );\n }\n\n return { bitWidth, exceptionCount, bytePosIn };\n}\n\n/**\n * Reads and validates the exception header for a block.\n *\n * @remarks\n * The header contains `maxBits` (1 byte), which defines the width of the outlier values as\n * `exceptionBitWidth = maxBits - bitWidth`.\n *\n * @param byteContainer - Byte metadata buffer for the page.\n * @param byteContainerLen - The valid byte length in `byteContainer` for this page.\n * @param bytePosIn - Current offset in `byteContainer`.\n * @param bitWidth - Base bit-width for the block.\n * @param exceptionCount - Number of exceptions/outliers in this block.\n * @param block - Block index within the page (for error messages).\n * @returns Parsed `maxBits`, `exceptionBitWidth`, and the updated `bytePosIn`.\n */\nfunction readBlockExceptionHeader(\n byteContainer: Uint8Array,\n byteContainerLen: number,\n bytePosIn: number,\n bitWidth: number,\n exceptionCount: number,\n block: number,\n): { maxBits: number; exceptionBitWidth: number; bytePosIn: number } {\n if (bytePosIn + 1 > byteContainerLen) {\n throw new Error(\n `FastPFOR decode: exception header underflow at block=${block} (need 1 byte for maxBits, bytePos=${bytePosIn}, byteSize=${byteContainerLen})`,\n );\n }\n const maxBits = byteContainer[bytePosIn++];\n\n if (maxBits < bitWidth || maxBits > MAX_BIT_WIDTH) {\n throw new Error(\n `FastPFOR decode: invalid maxBits=${maxBits} at block=${block} (bitWidth=${bitWidth}, expected ${bitWidth}..${MAX_BIT_WIDTH})`,\n );\n }\n const exceptionBitWidth = (maxBits - bitWidth) | 0;\n if (exceptionBitWidth < 1 || exceptionBitWidth > MAX_BIT_WIDTH) {\n throw new Error(\n `FastPFOR decode: invalid exceptionBitWidth=${exceptionBitWidth} at block=${block} (bitWidth=${bitWidth}, maxBits=${maxBits})`,\n );\n }\n\n if (bytePosIn + exceptionCount > byteContainerLen) {\n throw new Error(\n `FastPFOR decode: exception positions underflow at block=${block} (need=${exceptionCount}, have=${byteContainerLen - bytePosIn})`,\n );\n }\n\n return { maxBits, exceptionBitWidth, bytePosIn };\n}\n\n/**\n * Applies (block-local) FastPFOR \"exceptions\" (outliers) to an already-unpacked base 256-value block.\n *\n * @param out - Output buffer containing the base unpacked values for the block.\n * @param blockOutPos - Offset in `out` where the 256-value block starts.\n * @param bitWidth - Base bit-width for the block.\n * @param exceptionCount - Number of exceptions/outliers in this block.\n * @param byteContainer - Byte metadata buffer for the page.\n * @param byteContainerLen - The valid byte length in `byteContainer` for this page.\n * @param bytePosIn - Current offset in `byteContainer` (right after `[bitWidth, exceptionCount]`).\n * @param workspace - Decoder workspace holding the unpacked exception streams.\n * @param block - Block index within the page (for error messages).\n * @returns The updated `bytePosIn` after consuming the exception metadata bytes.\n *\n * The exception metadata is stored in `byteContainer`:\n * - `maxBits` (1 byte): the maximum bit-width of any value in the block\n * - `exceptionCount` exception positions (1 byte each, 0..255)\n *\n * The exception values themselves are read from the pre-unpacked exception streams stored in `workspace`.\n * Returns the new position in the byteContainer after consuming the exception metadata bytes.\n */\nfunction applyBlockExceptions(\n out: Int32Array,\n blockOutPos: number,\n bitWidth: number,\n exceptionCount: number,\n byteContainer: Uint8Array,\n byteContainerLen: number,\n bytePosIn: number,\n workspace: FastPforDecoderWorkspace,\n block: number,\n): number {\n const {\n maxBits,\n exceptionBitWidth,\n bytePosIn: afterHeaderPos,\n } = readBlockExceptionHeader(byteContainer, byteContainerLen, bytePosIn, bitWidth, exceptionCount, block);\n bytePosIn = afterHeaderPos;\n\n if (exceptionBitWidth === 1) {\n const shift = 1 << bitWidth;\n for (let k = 0; k < exceptionCount; k = (k + 1) | 0) {\n const pos = byteContainer[bytePosIn++];\n out[(pos + blockOutPos) | 0] |= shift;\n }\n return bytePosIn;\n }\n\n const exceptionValues = workspace.dataToBePacked[exceptionBitWidth];\n if (!exceptionValues) {\n throw new Error(\n `FastPFOR decode: missing exception stream for exceptionBitWidth=${exceptionBitWidth} (bitWidth=${bitWidth}, maxBits=${maxBits}) at block ${block}`,\n );\n }\n\n const exceptionPointers = workspace.dataPointers;\n let exPtr = exceptionPointers[exceptionBitWidth] | 0;\n const exSize = workspace.exceptionSizes[exceptionBitWidth] | 0;\n\n if (exPtr + exceptionCount > exSize) {\n throw new Error(\n `FastPFOR decode: exception stream overflow for exceptionBitWidth=${exceptionBitWidth} (ptr=${exPtr}, need ${exceptionCount}, size=${exSize}) at block ${block}`,\n );\n }\n\n for (let k = 0; k < exceptionCount; k = (k + 1) | 0) {\n const pos = byteContainer[bytePosIn++];\n const val = exceptionValues[exPtr++] | 0;\n out[(pos + blockOutPos) | 0] |= val << bitWidth;\n }\n exceptionPointers[exceptionBitWidth] = exPtr;\n return bytePosIn;\n}\n\nfunction decodePageBlocks(\n inValues: Int32Array,\n pageStart: number,\n inPos: number,\n packedEnd: number,\n out: Int32Array,\n outPos: number,\n blocks: number,\n byteContainer: Uint8Array,\n byteContainerLen: number,\n workspace: FastPforDecoderWorkspace,\n): void {\n let tmpInPos = inPos | 0;\n let bytePosIn = 0;\n\n for (let run = 0; run < blocks; run = (run + 1) | 0) {\n const header = readBlockHeader(byteContainer, byteContainerLen, bytePosIn, run);\n bytePosIn = header.bytePosIn;\n const bitWidth = header.bitWidth;\n const exceptionCount = header.exceptionCount;\n\n const blockOutPos = (outPos + run * BLOCK_SIZE) | 0;\n\n switch (bitWidth) {\n case 0:\n out.fill(0, blockOutPos, blockOutPos + BLOCK_SIZE);\n break;\n\n case 32:\n for (let i = 0; i < BLOCK_SIZE; i = (i + 1) | 0) {\n out[(blockOutPos + i) | 0] = inValues[(tmpInPos + i) | 0] | 0;\n }\n tmpInPos = (tmpInPos + BLOCK_SIZE) | 0;\n break;\n\n default:\n tmpInPos = unpackBlock256(inValues, tmpInPos, out, blockOutPos, bitWidth);\n break;\n }\n\n if (exceptionCount > 0) {\n bytePosIn = applyBlockExceptions(\n out,\n blockOutPos,\n bitWidth,\n exceptionCount,\n byteContainer,\n byteContainerLen,\n bytePosIn,\n workspace,\n run,\n );\n }\n }\n\n if (tmpInPos !== packedEnd) {\n throw new Error(\n `FastPFOR decode: packed region mismatch (pageStart=${pageStart}, packedStart=${inPos}, consumedPackedEnd=${tmpInPos}, expectedPackedEnd=${packedEnd}, packedWords=${packedEnd - inPos}, encoded.length=${inValues.length})`,\n );\n }\n\n return;\n}\n\n/**\n * Decodes one FastPFOR page (aligned to 256-value blocks).\n */\nfunction decodePage(\n inValues: Int32Array,\n out: Int32Array,\n inPos: number,\n outPos: number,\n thisSize: number,\n workspace: FastPforDecoderWorkspace,\n): number {\n const pageStart = inPos | 0;\n const whereMeta = inValues[pageStart] | 0;\n\n if (whereMeta <= 0 || pageStart + whereMeta > inValues.length - 1) {\n throw new Error(\n `FastPFOR decode: invalid whereMeta=${whereMeta} at pageStart=${pageStart} (expected > 0 and pageStart+whereMeta < encoded.length=${inValues.length})`,\n );\n }\n\n const packedStart = (pageStart + 1) | 0;\n const packedEnd = (pageStart + whereMeta) | 0;\n\n const byteSize = inValues[packedEnd] >>> 0;\n const metaInts = (byteSize + 3) >>> 2;\n const byteContainerStart = packedEnd + 1;\n const bitmapPos = byteContainerStart + metaInts;\n\n if (bitmapPos >= inValues.length) {\n throw new Error(\n `FastPFOR decode: invalid byteSize=${byteSize} (metaInts=${metaInts}, pageStart=${pageStart}, packedEnd=${packedEnd}, byteContainerStart=${byteContainerStart}) causes bitmapPos=${bitmapPos} out of bounds (encoded.length=${inValues.length})`,\n );\n }\n\n const byteContainer = materializeByteContainer(inValues, byteContainerStart, byteSize, workspace);\n const byteContainerLen = byteSize;\n\n const inExcept = unpackExceptionStreams(inValues, bitmapPos, workspace);\n\n const exceptionPointers = workspace.dataPointers;\n exceptionPointers.fill(0);\n const startOutPos = outPos | 0;\n const blocks = (thisSize / BLOCK_SIZE) | 0;\n decodePageBlocks(\n inValues,\n pageStart,\n packedStart,\n packedEnd,\n out,\n startOutPos,\n blocks,\n byteContainer,\n byteContainerLen,\n workspace,\n );\n\n return inExcept;\n}\n\nfunction decodeAlignedPages(\n inValues: Int32Array,\n out: Int32Array,\n inPos: number,\n outPos: number,\n outLength: number,\n workspace: FastPforDecoderWorkspace,\n): number {\n const alignedOutLength = greatestMultiple(outLength, BLOCK_SIZE);\n const finalOut = outPos + alignedOutLength;\n let tmpOutPos = outPos;\n let tmpInPos = inPos;\n\n while (tmpOutPos !== finalOut) {\n const thisSize = Math.min(PAGE_SIZE, finalOut - tmpOutPos);\n tmpInPos = decodePage(inValues, out, tmpInPos, tmpOutPos, thisSize, workspace);\n tmpOutPos = (tmpOutPos + thisSize) | 0;\n }\n\n return tmpInPos;\n}\n\n/**\n * Decodes the VariableByte tail (MSB=1 terminator, opposite of Protobuf Varint).\n */\nfunction decodeVByte(\n inValues: Int32Array,\n inPos: number,\n inLength: number,\n out: Int32Array,\n outPos: number,\n expectedCount: number,\n): number {\n if (expectedCount === 0) return inPos;\n\n let bitOffset = 0;\n let wordIndex = inPos;\n const finalWordIndex = inPos + inLength;\n const outPos0 = outPos;\n let tmpOutPos = outPos;\n const targetOut = outPos + expectedCount;\n\n let accumulator = 0;\n let accumulatorShift = 0;\n\n while (wordIndex < finalWordIndex && tmpOutPos < targetOut) {\n const word = inValues[wordIndex];\n const byte = (word >>> bitOffset) & 0xff;\n bitOffset += 8;\n wordIndex += bitOffset >>> 5;\n bitOffset &= 31;\n\n accumulator |= (byte & 0x7f) << accumulatorShift;\n if ((byte & 0x80) !== 0) {\n out[tmpOutPos++] = accumulator | 0;\n accumulator = 0;\n accumulatorShift = 0;\n } else {\n accumulatorShift += 7;\n if (accumulatorShift > 28) {\n throw new Error(\n `FastPFOR VByte: unterminated value (expected MSB=1 terminator within 5 bytes; shift=${accumulatorShift}, partial=${accumulator}, decoded=${tmpOutPos - outPos0}/${expectedCount}, inPos=${wordIndex}, inEnd=${finalWordIndex})`,\n );\n }\n }\n }\n\n if (tmpOutPos !== targetOut) {\n throw new Error(\n `FastPFOR VByte: truncated stream (decoded=${tmpOutPos - outPos0}, expected=${expectedCount}, consumedWords=${wordIndex - inPos}/${inLength}, vbyteStart=${inPos}, vbyteEnd=${finalWordIndex})`,\n );\n }\n\n return wordIndex;\n}\n\n/**\n * Decodes a sequence of FastPFOR-encoded integers.\n *\n * @param encoded The input buffer containing FastPFOR encoded data.\n * @param numValues The number of integers expected to be decoded.\n * @param workspace Optional workspace for reuse across calls. If omitted, a new workspace is created per call.\n */\nexport function decodeFastPforInt32(\n encoded: Int32Buf,\n numValues: number,\n workspace?: FastPforDecoderWorkspace,\n): Int32Array {\n let inPos = 0;\n let outPos = 0;\n const decoded = new Int32Array(numValues);\n\n const decoderWorkspace = workspace ?? createDecoderWorkspace();\n\n if (encoded.length > 0) {\n const alignedLength = encoded[inPos] | 0;\n inPos = (inPos + 1) | 0;\n\n if (alignedLength < 0 || (alignedLength & (BLOCK_SIZE - 1)) !== 0) {\n throw new Error(\n `FastPFOR decode: invalid alignedLength=${alignedLength} (expected >= 0 and multiple of ${BLOCK_SIZE})`,\n );\n }\n\n if (outPos + alignedLength > decoded.length) {\n throw new Error(\n `FastPFOR decode: output buffer too small (outPos=${outPos}, alignedLength=${alignedLength}, out.length=${decoded.length})`,\n );\n }\n\n inPos = decodeAlignedPages(encoded, decoded, inPos, outPos, alignedLength, decoderWorkspace);\n outPos = (outPos + alignedLength) | 0;\n }\n\n const remainingLength = (encoded.length - inPos) | 0;\n const expectedTail = (numValues - outPos) | 0;\n decodeVByte(encoded, inPos, remainingLength, decoded, outPos, expectedTail);\n\n return decoded;\n}\n\nfunction fastUnpack32(inValues: Int32Array, inPos: number, out: Int32Array, outPos: number, bitWidth: number): void {\n switch (bitWidth) {\n case 2:\n fastUnpack32_2(inValues, inPos, out, outPos);\n return;\n case 3:\n fastUnpack32_3(inValues, inPos, out, outPos);\n return;\n case 4:\n fastUnpack32_4(inValues, inPos, out, outPos);\n return;\n case 5:\n fastUnpack32_5(inValues, inPos, out, outPos);\n return;\n case 6:\n fastUnpack32_6(inValues, inPos, out, outPos);\n return;\n case 7:\n fastUnpack32_7(inValues, inPos, out, outPos);\n return;\n case 8:\n fastUnpack32_8(inValues, inPos, out, outPos);\n return;\n case 9:\n fastUnpack32_9(inValues, inPos, out, outPos);\n return;\n case 10:\n fastUnpack32_10(inValues, inPos, out, outPos);\n return;\n case 11:\n fastUnpack32_11(inValues, inPos, out, outPos);\n return;\n case 12:\n fastUnpack32_12(inValues, inPos, out, outPos);\n return;\n case 16:\n fastUnpack32_16(inValues, inPos, out, outPos);\n return;\n case 32:\n for (let i = 0; i < 32; i = (i + 1) | 0) {\n out[(outPos + i) | 0] = inValues[(inPos + i) | 0] | 0;\n }\n return;\n default:\n break;\n }\n\n const valueMask = MASKS[bitWidth] >>> 0;\n let inputWordIndex = inPos;\n let bitOffset = 0;\n let currentWord = inValues[inputWordIndex] >>> 0;\n\n for (let i = 0; i < 32; i++) {\n if (bitOffset + bitWidth <= 32) {\n const value = (currentWord >>> bitOffset) & valueMask;\n out[outPos + i] = value | 0;\n bitOffset += bitWidth;\n\n if (bitOffset === 32) {\n bitOffset = 0;\n inputWordIndex++;\n if (i !== 31) currentWord = inValues[inputWordIndex] >>> 0;\n }\n } else {\n const lowBits = 32 - bitOffset;\n const low = currentWord >>> bitOffset;\n\n inputWordIndex++;\n currentWord = inValues[inputWordIndex] >>> 0;\n const highMask = MASKS[bitWidth - lowBits] >>> 0;\n const high = currentWord & highMask;\n\n const value = (low | (high << lowBits)) & valueMask;\n out[outPos + i] = value | 0;\n bitOffset = bitWidth - lowBits;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"fastPforDecoder.js","sourceRoot":"","sources":["../../src/decoding/fastPforDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MASKS,\n DEFAULT_PAGE_SIZE,\n BLOCK_SIZE,\n greatestMultiple,\n roundUpToMultipleOf32,\n normalizePageSize,\n} from \"./fastPforShared\";\nimport {\n fastUnpack32_2,\n fastUnpack32_3,\n fastUnpack32_4,\n fastUnpack32_5,\n fastUnpack32_6,\n fastUnpack32_7,\n fastUnpack32_8,\n fastUnpack32_9,\n fastUnpack32_10,\n fastUnpack32_11,\n fastUnpack32_12,\n fastUnpack32_16,\n fastUnpack256_1,\n fastUnpack256_2,\n fastUnpack256_3,\n fastUnpack256_4,\n fastUnpack256_5,\n fastUnpack256_6,\n fastUnpack256_7,\n fastUnpack256_8,\n fastUnpack256_16,\n fastUnpack256_Generic,\n} from \"./fastPforUnpack\";\n\n/**\n * FastPFOR decoding implementation.\n *\n * @remarks\n * Terminology note: \"exceptions\" in FastPFOR refer to **outlier values** within a block that do not fit in the\n * chosen base bit-width for that block. These are stored in separate \"exception streams\" and later applied back\n * to the unpacked base values. This is unrelated to JavaScript/TypeScript runtime exceptions.\n */\n\n/**\n * Workspace for the FastPFOR decoder.\n */\nexport type FastPforDecoderWorkspace = {\n dataToBePacked: Array<Uint32Array>;\n dataPointers: Int32Array;\n byteContainer: Uint8Array;\n byteContainerI32?: Int32Array;\n exceptionSizes: Int32Array;\n};\n\n/**\n * Workspace for decoding the FastPFOR *wire format* (big-endian int32 words).\n *\n * @remarks\n * This workspace owns:\n * - a scratch `encodedWords` buffer to materialize big-endian words\n * - the reusable `FastPforDecoderWorkspace` used by `decodeFastPforInt32`\n *\n * The caller is responsible for creating and reusing this object.\n */\nexport type FastPforWireDecodeWorkspace = {\n encodedWords: Uint32Array;\n decoderWorkspace: FastPforDecoderWorkspace;\n};\n\nconst MAX_BIT_WIDTH = 32;\nconst BIT_WIDTH_SLOTS = MAX_BIT_WIDTH + 1;\n\nconst PAGE_SIZE = normalizePageSize(DEFAULT_PAGE_SIZE);\nconst BYTE_CONTAINER_SIZE = ((3 * PAGE_SIZE) / BLOCK_SIZE + PAGE_SIZE) | 0;\n\n/**\n * Creates an isolated workspace for decoding.\n * Reusing a workspace across calls avoids repeated allocations.\n */\nexport function createDecoderWorkspace(): FastPforDecoderWorkspace {\n const byteContainer = new Uint8Array(BYTE_CONTAINER_SIZE);\n return {\n dataToBePacked: new Array(BIT_WIDTH_SLOTS),\n dataPointers: new Int32Array(BIT_WIDTH_SLOTS),\n byteContainer,\n byteContainerI32: new Int32Array(\n byteContainer.buffer,\n byteContainer.byteOffset,\n byteContainer.byteLength >>> 2,\n ),\n exceptionSizes: new Int32Array(BIT_WIDTH_SLOTS),\n };\n}\n\nexport function createFastPforWireDecodeWorkspace(\n initialEncodedWordCapacity: number = 16,\n): FastPforWireDecodeWorkspace {\n if (initialEncodedWordCapacity < 0) {\n throw new RangeError(`initialEncodedWordCapacity must be >= 0, got ${initialEncodedWordCapacity}`);\n }\n\n const capacity = Math.max(16, initialEncodedWordCapacity | 0);\n return {\n encodedWords: new Uint32Array(capacity),\n decoderWorkspace: createDecoderWorkspace(),\n };\n}\n\nexport function ensureFastPforWireEncodedWordsCapacity(\n workspace: FastPforWireDecodeWorkspace,\n requiredWordCount: number,\n): Uint32Array {\n if (requiredWordCount <= workspace.encodedWords.length) return workspace.encodedWords;\n\n const next = new Uint32Array(Math.max(16, requiredWordCount * 2));\n workspace.encodedWords = next;\n return next;\n}\n\nfunction materializeByteContainer(\n inValues: Uint32Array,\n byteContainerStart: number,\n byteSize: number,\n workspace: FastPforDecoderWorkspace,\n): Uint8Array {\n if (workspace.byteContainer.length < byteSize) {\n workspace.byteContainer = new Uint8Array(byteSize * 2);\n workspace.byteContainerI32 = undefined;\n }\n const byteContainer = workspace.byteContainer;\n const numFullInts = byteSize >>> 2;\n\n if ((byteContainer.byteOffset & 3) === 0) {\n let intView = workspace.byteContainerI32;\n if (\n !intView ||\n intView.buffer !== byteContainer.buffer ||\n intView.byteOffset !== byteContainer.byteOffset ||\n intView.length < numFullInts\n ) {\n intView = workspace.byteContainerI32 = new Int32Array(\n byteContainer.buffer,\n byteContainer.byteOffset,\n byteContainer.byteLength >>> 2,\n );\n }\n\n intView.set(inValues.subarray(byteContainerStart, byteContainerStart + numFullInts));\n } else {\n for (let i = 0; i < numFullInts; i = (i + 1) | 0) {\n const val = inValues[(byteContainerStart + i) | 0] | 0;\n const base = i << 2;\n byteContainer[base] = val & 0xff;\n byteContainer[(base + 1) | 0] = (val >>> 8) & 0xff;\n byteContainer[(base + 2) | 0] = (val >>> 16) & 0xff;\n byteContainer[(base + 3) | 0] = (val >>> 24) & 0xff;\n }\n }\n\n const remainder = byteSize & 3;\n if (remainder > 0) {\n const lastIntIdx = (byteContainerStart + numFullInts) | 0;\n const lastVal = inValues[lastIntIdx] | 0;\n const base = numFullInts << 2;\n for (let r = 0; r < remainder; r = (r + 1) | 0) {\n byteContainer[(base + r) | 0] = (lastVal >>> (r << 3)) & 0xff;\n }\n }\n\n return byteContainer;\n}\n\n/**\n * Unpacks the per-bitWidth \"exception streams\" described by the page's bitmap.\n *\n * @remarks\n * For each bit-width present in the bitmap, a stream header gives the count of outlier values for that\n * bit-width, followed by packed bits representing those values.\n *\n * @param inValues - Packed input (32-bit words).\n * @param inExcept - Offset (32-bit word index) where the exception bitmap starts.\n * @param workspace - Decoder workspace used to store the unpacked exception streams.\n * @returns The new input offset (32-bit word index) after consuming all exception streams.\n */\nfunction unpackExceptionStreams(inValues: Uint32Array, inExcept: number, workspace: FastPforDecoderWorkspace): number {\n const bitmap = inValues[inExcept++] | 0;\n const dataToBePacked = workspace.dataToBePacked;\n\n for (let bitWidth = 2; bitWidth <= MAX_BIT_WIDTH; bitWidth = (bitWidth + 1) | 0) {\n if (((bitmap >>> (bitWidth - 1)) & 1) === 0) continue;\n\n if (inExcept >= inValues.length) {\n throw new Error(\n `FastPFOR decode: truncated exception stream header (bitWidth=${bitWidth}, streamWordIndex=${inExcept}, needWords=1, availableWords=${inValues.length - inExcept}, encodedWords=${inValues.length})`,\n );\n }\n const size = inValues[inExcept++] >>> 0;\n const roundedUp = roundUpToMultipleOf32(size);\n\n const wordsNeeded = (size * bitWidth + 31) >>> 5;\n if (inExcept + wordsNeeded > inValues.length) {\n throw new Error(\n `FastPFOR decode: truncated exception stream (bitWidth=${bitWidth}, size=${size}, streamWordIndex=${inExcept}, needWords=${wordsNeeded}, availableWords=${inValues.length - inExcept}, encodedWords=${inValues.length})`,\n );\n }\n\n let exceptionStream = dataToBePacked[bitWidth];\n if (!exceptionStream || exceptionStream.length < roundedUp) {\n exceptionStream = dataToBePacked[bitWidth] = new Uint32Array(roundedUp);\n }\n\n let j = 0;\n for (; j < size; j = (j + 32) | 0) {\n fastUnpack32(inValues, inExcept, exceptionStream, j, bitWidth);\n inExcept = (inExcept + bitWidth) | 0;\n }\n\n const overflow = (j - size) | 0;\n inExcept = (inExcept - ((overflow * bitWidth) >>> 5)) | 0;\n\n workspace.exceptionSizes[bitWidth] = size;\n }\n\n return inExcept;\n}\n\n/**\n * Unpacks one 256-value block from the packed bitstream using a specialized implementation for common widths.\n *\n * @param inValues - Packed input (32-bit words).\n * @param inPos - Input offset (32-bit word index) where the packed block starts.\n * @param out - Output buffer.\n * @param outPos - Output offset where the 256 values will be written.\n * @param bitWidth - Base bit-width used for this block.\n * @returns The new input offset (32-bit word index) right after the packed block data.\n */\nfunction unpackBlock256(\n inValues: Uint32Array,\n inPos: number,\n out: Uint32Array,\n outPos: number,\n bitWidth: number,\n): number {\n switch (bitWidth) {\n case 1:\n fastUnpack256_1(inValues, inPos, out, outPos);\n break;\n case 2:\n fastUnpack256_2(inValues, inPos, out, outPos);\n break;\n case 3:\n fastUnpack256_3(inValues, inPos, out, outPos);\n break;\n case 4:\n fastUnpack256_4(inValues, inPos, out, outPos);\n break;\n case 5:\n fastUnpack256_5(inValues, inPos, out, outPos);\n break;\n case 6:\n fastUnpack256_6(inValues, inPos, out, outPos);\n break;\n case 7:\n fastUnpack256_7(inValues, inPos, out, outPos);\n break;\n case 8:\n fastUnpack256_8(inValues, inPos, out, outPos);\n break;\n case 16:\n fastUnpack256_16(inValues, inPos, out, outPos);\n break;\n default:\n fastUnpack256_Generic(inValues, inPos, out, outPos, bitWidth);\n break;\n }\n\n return (inPos + (bitWidth << 3)) | 0;\n}\n\n/**\n * Reads and validates the 2-byte block header from the byteContainer.\n *\n * @remarks\n * The header is `[bitWidth, exceptionCount]`, both stored as single bytes.\n *\n * @param byteContainer - Byte metadata buffer for the page.\n * @param byteContainerLen - The valid byte length in `byteContainer` for this page.\n * @param bytePosIn - Current offset in `byteContainer`.\n * @param block - Block index within the page (for error messages).\n * @returns The parsed header and the updated `bytePosIn`.\n */\nfunction readBlockHeader(\n byteContainer: Uint8Array,\n byteContainerLen: number,\n bytePosIn: number,\n block: number,\n): { bitWidth: number; exceptionCount: number; bytePosIn: number } {\n if (bytePosIn + 2 > byteContainerLen) {\n throw new Error(\n `FastPFOR decode: byteContainer underflow at block=${block} (need 2 bytes for [bitWidth, exceptionCount], bytePos=${bytePosIn}, byteSize=${byteContainerLen})`,\n );\n }\n\n const bitWidth = byteContainer[bytePosIn++];\n const exceptionCount = byteContainer[bytePosIn++];\n\n if (bitWidth > MAX_BIT_WIDTH) {\n throw new Error(\n `FastPFOR decode: invalid bitWidth=${bitWidth} at block=${block} (expected 0..${MAX_BIT_WIDTH}). This likely indicates corrupted or truncated input.`,\n );\n }\n\n return { bitWidth, exceptionCount, bytePosIn };\n}\n\n/**\n * Reads and validates the exception header for a block.\n *\n * @remarks\n * The header contains `maxBits` (1 byte), which defines the width of the outlier values as\n * `exceptionBitWidth = maxBits - bitWidth`.\n *\n * @param byteContainer - Byte metadata buffer for the page.\n * @param byteContainerLen - The valid byte length in `byteContainer` for this page.\n * @param bytePosIn - Current offset in `byteContainer`.\n * @param bitWidth - Base bit-width for the block.\n * @param exceptionCount - Number of exceptions/outliers in this block.\n * @param block - Block index within the page (for error messages).\n * @returns Parsed `maxBits`, `exceptionBitWidth`, and the updated `bytePosIn`.\n */\nfunction readBlockExceptionHeader(\n byteContainer: Uint8Array,\n byteContainerLen: number,\n bytePosIn: number,\n bitWidth: number,\n exceptionCount: number,\n block: number,\n): { maxBits: number; exceptionBitWidth: number; bytePosIn: number } {\n if (bytePosIn + 1 > byteContainerLen) {\n throw new Error(\n `FastPFOR decode: exception header underflow at block=${block} (need 1 byte for maxBits, bytePos=${bytePosIn}, byteSize=${byteContainerLen})`,\n );\n }\n const maxBits = byteContainer[bytePosIn++];\n\n if (maxBits < bitWidth || maxBits > MAX_BIT_WIDTH) {\n throw new Error(\n `FastPFOR decode: invalid maxBits=${maxBits} at block=${block} (bitWidth=${bitWidth}, expected ${bitWidth}..${MAX_BIT_WIDTH})`,\n );\n }\n const exceptionBitWidth = (maxBits - bitWidth) | 0;\n if (exceptionBitWidth < 1 || exceptionBitWidth > MAX_BIT_WIDTH) {\n throw new Error(\n `FastPFOR decode: invalid exceptionBitWidth=${exceptionBitWidth} at block=${block} (bitWidth=${bitWidth}, maxBits=${maxBits})`,\n );\n }\n\n if (bytePosIn + exceptionCount > byteContainerLen) {\n throw new Error(\n `FastPFOR decode: exception positions underflow at block=${block} (need=${exceptionCount}, have=${byteContainerLen - bytePosIn})`,\n );\n }\n\n return { maxBits, exceptionBitWidth, bytePosIn };\n}\n\n/**\n * Applies (block-local) FastPFOR \"exceptions\" (outliers) to an already-unpacked base 256-value block.\n *\n * @param out - Output buffer containing the base unpacked values for the block.\n * @param blockOutPos - Offset in `out` where the 256-value block starts.\n * @param bitWidth - Base bit-width for the block.\n * @param exceptionCount - Number of exceptions/outliers in this block.\n * @param byteContainer - Byte metadata buffer for the page.\n * @param byteContainerLen - The valid byte length in `byteContainer` for this page.\n * @param bytePosIn - Current offset in `byteContainer` (right after `[bitWidth, exceptionCount]`).\n * @param workspace - Decoder workspace holding the unpacked exception streams.\n * @param block - Block index within the page (for error messages).\n * @returns The updated `bytePosIn` after consuming the exception metadata bytes.\n *\n * The exception metadata is stored in `byteContainer`:\n * - `maxBits` (1 byte): the maximum bit-width of any value in the block\n * - `exceptionCount` exception positions (1 byte each, 0..255)\n *\n * The exception values themselves are read from the pre-unpacked exception streams stored in `workspace`.\n * Returns the new position in the byteContainer after consuming the exception metadata bytes.\n */\nfunction applyBlockExceptions(\n out: Uint32Array,\n blockOutPos: number,\n bitWidth: number,\n exceptionCount: number,\n byteContainer: Uint8Array,\n byteContainerLen: number,\n bytePosIn: number,\n workspace: FastPforDecoderWorkspace,\n block: number,\n): number {\n const {\n maxBits,\n exceptionBitWidth,\n bytePosIn: afterHeaderPos,\n } = readBlockExceptionHeader(byteContainer, byteContainerLen, bytePosIn, bitWidth, exceptionCount, block);\n bytePosIn = afterHeaderPos;\n\n if (exceptionBitWidth === 1) {\n const shift = 1 << bitWidth;\n for (let k = 0; k < exceptionCount; k = (k + 1) | 0) {\n const pos = byteContainer[bytePosIn++];\n out[(pos + blockOutPos) | 0] |= shift;\n }\n return bytePosIn;\n }\n\n const exceptionValues = workspace.dataToBePacked[exceptionBitWidth];\n if (!exceptionValues) {\n throw new Error(\n `FastPFOR decode: missing exception stream for exceptionBitWidth=${exceptionBitWidth} (bitWidth=${bitWidth}, maxBits=${maxBits}) at block ${block}`,\n );\n }\n\n const exceptionPointers = workspace.dataPointers;\n let exPtr = exceptionPointers[exceptionBitWidth] | 0;\n const exSize = workspace.exceptionSizes[exceptionBitWidth] | 0;\n\n if (exPtr + exceptionCount > exSize) {\n throw new Error(\n `FastPFOR decode: exception stream overflow for exceptionBitWidth=${exceptionBitWidth} (ptr=${exPtr}, need ${exceptionCount}, size=${exSize}) at block ${block}`,\n );\n }\n\n for (let k = 0; k < exceptionCount; k = (k + 1) | 0) {\n const pos = byteContainer[bytePosIn++];\n const val = exceptionValues[exPtr++] | 0;\n out[(pos + blockOutPos) | 0] |= val << bitWidth;\n }\n exceptionPointers[exceptionBitWidth] = exPtr;\n return bytePosIn;\n}\n\nfunction decodePageBlocks(\n inValues: Uint32Array,\n pageStart: number,\n inPos: number,\n packedEnd: number,\n out: Uint32Array,\n outPos: number,\n blocks: number,\n byteContainer: Uint8Array,\n byteContainerLen: number,\n workspace: FastPforDecoderWorkspace,\n): void {\n let tmpInPos = inPos | 0;\n let bytePosIn = 0;\n\n for (let run = 0; run < blocks; run = (run + 1) | 0) {\n const header = readBlockHeader(byteContainer, byteContainerLen, bytePosIn, run);\n bytePosIn = header.bytePosIn;\n const bitWidth = header.bitWidth;\n const exceptionCount = header.exceptionCount;\n\n const blockOutPos = (outPos + run * BLOCK_SIZE) | 0;\n\n switch (bitWidth) {\n case 0:\n out.fill(0, blockOutPos, blockOutPos + BLOCK_SIZE);\n break;\n\n case 32:\n for (let i = 0; i < BLOCK_SIZE; i = (i + 1) | 0) {\n out[(blockOutPos + i) | 0] = inValues[(tmpInPos + i) | 0] | 0;\n }\n tmpInPos = (tmpInPos + BLOCK_SIZE) | 0;\n break;\n\n default:\n tmpInPos = unpackBlock256(inValues, tmpInPos, out, blockOutPos, bitWidth);\n break;\n }\n\n if (exceptionCount > 0) {\n bytePosIn = applyBlockExceptions(\n out,\n blockOutPos,\n bitWidth,\n exceptionCount,\n byteContainer,\n byteContainerLen,\n bytePosIn,\n workspace,\n run,\n );\n }\n }\n\n if (tmpInPos !== packedEnd) {\n throw new Error(\n `FastPFOR decode: packed region mismatch (pageStart=${pageStart}, packedStart=${inPos}, consumedPackedEnd=${tmpInPos}, expectedPackedEnd=${packedEnd}, packedWords=${packedEnd - inPos}, encoded.length=${inValues.length})`,\n );\n }\n\n return;\n}\n\n/**\n * Decodes one FastPFOR page (aligned to 256-value blocks).\n */\nfunction decodePage(\n inValues: Uint32Array,\n out: Uint32Array,\n inPos: number,\n outPos: number,\n thisSize: number,\n workspace: FastPforDecoderWorkspace,\n): number {\n const pageStart = inPos | 0;\n const whereMeta = inValues[pageStart] | 0;\n\n if (whereMeta <= 0 || pageStart + whereMeta > inValues.length - 1) {\n throw new Error(\n `FastPFOR decode: invalid whereMeta=${whereMeta} at pageStart=${pageStart} (expected > 0 and pageStart+whereMeta < encoded.length=${inValues.length})`,\n );\n }\n\n const packedStart = (pageStart + 1) | 0;\n const packedEnd = (pageStart + whereMeta) | 0;\n\n const byteSize = inValues[packedEnd] >>> 0;\n const metaInts = (byteSize + 3) >>> 2;\n const byteContainerStart = packedEnd + 1;\n const bitmapPos = byteContainerStart + metaInts;\n\n if (bitmapPos >= inValues.length) {\n throw new Error(\n `FastPFOR decode: invalid byteSize=${byteSize} (metaInts=${metaInts}, pageStart=${pageStart}, packedEnd=${packedEnd}, byteContainerStart=${byteContainerStart}) causes bitmapPos=${bitmapPos} out of bounds (encoded.length=${inValues.length})`,\n );\n }\n\n const byteContainer = materializeByteContainer(inValues, byteContainerStart, byteSize, workspace);\n const byteContainerLen = byteSize;\n\n const inExcept = unpackExceptionStreams(inValues, bitmapPos, workspace);\n\n const exceptionPointers = workspace.dataPointers;\n exceptionPointers.fill(0);\n const startOutPos = outPos | 0;\n const blocks = (thisSize / BLOCK_SIZE) | 0;\n decodePageBlocks(\n inValues,\n pageStart,\n packedStart,\n packedEnd,\n out,\n startOutPos,\n blocks,\n byteContainer,\n byteContainerLen,\n workspace,\n );\n\n return inExcept;\n}\n\nfunction decodeAlignedPages(\n inValues: Uint32Array,\n out: Uint32Array,\n inPos: number,\n outPos: number,\n outLength: number,\n workspace: FastPforDecoderWorkspace,\n): number {\n const alignedOutLength = greatestMultiple(outLength, BLOCK_SIZE);\n const finalOut = outPos + alignedOutLength;\n let tmpOutPos = outPos;\n let tmpInPos = inPos;\n\n while (tmpOutPos !== finalOut) {\n const thisSize = Math.min(PAGE_SIZE, finalOut - tmpOutPos);\n tmpInPos = decodePage(inValues, out, tmpInPos, tmpOutPos, thisSize, workspace);\n tmpOutPos = (tmpOutPos + thisSize) | 0;\n }\n\n return tmpInPos;\n}\n\n/**\n * Decodes the VariableByte tail (MSB=1 terminator, opposite of Protobuf Varint).\n */\nfunction decodeVByte(\n inValues: Uint32Array,\n inPos: number,\n inLength: number,\n out: Uint32Array,\n outPos: number,\n expectedCount: number,\n): number {\n if (expectedCount === 0) return inPos;\n\n let bitOffset = 0;\n let wordIndex = inPos;\n const finalWordIndex = inPos + inLength;\n const outPos0 = outPos;\n let tmpOutPos = outPos;\n const targetOut = outPos + expectedCount;\n\n let accumulator = 0;\n let accumulatorShift = 0;\n\n while (wordIndex < finalWordIndex && tmpOutPos < targetOut) {\n const word = inValues[wordIndex];\n const byte = (word >>> bitOffset) & 0xff;\n bitOffset += 8;\n wordIndex += bitOffset >>> 5;\n bitOffset &= 31;\n\n accumulator |= (byte & 0x7f) << accumulatorShift;\n if ((byte & 0x80) !== 0) {\n out[tmpOutPos++] = accumulator | 0;\n accumulator = 0;\n accumulatorShift = 0;\n } else {\n accumulatorShift += 7;\n if (accumulatorShift > 28) {\n throw new Error(\n `FastPFOR VByte: unterminated value (expected MSB=1 terminator within 5 bytes; shift=${accumulatorShift}, partial=${accumulator}, decoded=${tmpOutPos - outPos0}/${expectedCount}, inPos=${wordIndex}, inEnd=${finalWordIndex})`,\n );\n }\n }\n }\n\n if (tmpOutPos !== targetOut) {\n throw new Error(\n `FastPFOR VByte: truncated stream (decoded=${tmpOutPos - outPos0}, expected=${expectedCount}, consumedWords=${wordIndex - inPos}/${inLength}, vbyteStart=${inPos}, vbyteEnd=${finalWordIndex})`,\n );\n }\n\n return wordIndex;\n}\n\n/**\n * Decodes a sequence of FastPFOR-encoded integers.\n *\n * @param encoded The input buffer containing FastPFOR encoded data.\n * @param numValues The number of integers expected to be decoded.\n * @param workspace Optional workspace for reuse across calls. If omitted, a new workspace is created per call.\n */\nexport function decodeFastPforInt32(\n encoded: Uint32Array,\n numValues: number,\n workspace?: FastPforDecoderWorkspace,\n): Uint32Array {\n let inPos = 0;\n let outPos = 0;\n const decoded = new Uint32Array(numValues);\n\n const decoderWorkspace = workspace ?? createDecoderWorkspace();\n\n if (encoded.length > 0) {\n const alignedLength = encoded[inPos] | 0;\n inPos = (inPos + 1) | 0;\n\n if ((alignedLength & (BLOCK_SIZE - 1)) !== 0) {\n throw new Error(\n `FastPFOR decode: invalid alignedLength=${alignedLength} (expected multiple of ${BLOCK_SIZE})`,\n );\n }\n\n if (outPos + alignedLength > decoded.length) {\n throw new Error(\n `FastPFOR decode: output buffer too small (outPos=${outPos}, alignedLength=${alignedLength}, out.length=${decoded.length})`,\n );\n }\n\n inPos = decodeAlignedPages(encoded, decoded, inPos, outPos, alignedLength, decoderWorkspace);\n outPos = (outPos + alignedLength) | 0;\n }\n\n const remainingLength = (encoded.length - inPos) | 0;\n const expectedTail = (numValues - outPos) | 0;\n decodeVByte(encoded, inPos, remainingLength, decoded, outPos, expectedTail);\n\n return decoded;\n}\n\nfunction fastUnpack32(inValues: Uint32Array, inPos: number, out: Uint32Array, outPos: number, bitWidth: number): void {\n switch (bitWidth) {\n case 2:\n fastUnpack32_2(inValues, inPos, out, outPos);\n return;\n case 3:\n fastUnpack32_3(inValues, inPos, out, outPos);\n return;\n case 4:\n fastUnpack32_4(inValues, inPos, out, outPos);\n return;\n case 5:\n fastUnpack32_5(inValues, inPos, out, outPos);\n return;\n case 6:\n fastUnpack32_6(inValues, inPos, out, outPos);\n return;\n case 7:\n fastUnpack32_7(inValues, inPos, out, outPos);\n return;\n case 8:\n fastUnpack32_8(inValues, inPos, out, outPos);\n return;\n case 9:\n fastUnpack32_9(inValues, inPos, out, outPos);\n return;\n case 10:\n fastUnpack32_10(inValues, inPos, out, outPos);\n return;\n case 11:\n fastUnpack32_11(inValues, inPos, out, outPos);\n return;\n case 12:\n fastUnpack32_12(inValues, inPos, out, outPos);\n return;\n case 16:\n fastUnpack32_16(inValues, inPos, out, outPos);\n return;\n case 32:\n for (let i = 0; i < 32; i = (i + 1) | 0) {\n out[(outPos + i) | 0] = inValues[(inPos + i) | 0] | 0;\n }\n return;\n default:\n break;\n }\n\n const valueMask = MASKS[bitWidth] >>> 0;\n let inputWordIndex = inPos;\n let bitOffset = 0;\n let currentWord = inValues[inputWordIndex] >>> 0;\n\n for (let i = 0; i < 32; i++) {\n if (bitOffset + bitWidth <= 32) {\n const value = (currentWord >>> bitOffset) & valueMask;\n out[outPos + i] = value | 0;\n bitOffset += bitWidth;\n\n if (bitOffset === 32) {\n bitOffset = 0;\n inputWordIndex++;\n if (i !== 31) currentWord = inValues[inputWordIndex] >>> 0;\n }\n } else {\n const lowBits = 32 - bitOffset;\n const low = currentWord >>> bitOffset;\n\n inputWordIndex++;\n currentWord = inValues[inputWordIndex] >>> 0;\n const highMask = MASKS[bitWidth - lowBits] >>> 0;\n const high = currentWord & highMask;\n\n const value = (low | (high << lowBits)) & valueMask;\n out[outPos + i] = value | 0;\n bitOffset = bitWidth - lowBits;\n }\n }\n}\n"]}
@@ -1,5 +1,3 @@
1
- export type Int32Buf = Int32Array<ArrayBufferLike>;
2
- export type Uint8Buf = Uint8Array<ArrayBufferLike>;
3
1
  export declare const MASKS: Readonly<Uint32Array>;
4
2
  export declare const DEFAULT_PAGE_SIZE = 65536;
5
3
  export declare const BLOCK_SIZE = 256;