@maplibre/mlt 1.1.6 → 1.1.8

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 (221) hide show
  1. package/dist/decoding/bigEndianDecode.d.ts +13 -0
  2. package/dist/decoding/bigEndianDecode.js +50 -0
  3. package/dist/decoding/bigEndianDecode.js.map +1 -0
  4. package/dist/decoding/decodingTestUtils.d.ts +2 -2
  5. package/dist/decoding/decodingTestUtils.js +20 -21
  6. package/dist/decoding/decodingTestUtils.js.map +1 -1
  7. package/dist/decoding/decodingUtils.js +4 -2
  8. package/dist/decoding/decodingUtils.js.map +1 -1
  9. package/dist/decoding/fastPforDecoder.d.ts +47 -0
  10. package/dist/decoding/fastPforDecoder.js +482 -0
  11. package/dist/decoding/fastPforDecoder.js.map +1 -0
  12. package/dist/decoding/fastPforShared.d.ts +7 -0
  13. package/dist/decoding/fastPforShared.js +29 -0
  14. package/dist/decoding/fastPforShared.js.map +1 -0
  15. package/dist/decoding/fastPforUnpack.d.ts +23 -0
  16. package/dist/decoding/fastPforUnpack.js +910 -0
  17. package/dist/decoding/fastPforUnpack.js.map +1 -0
  18. package/dist/decoding/geometryDecoder.d.ts +2 -2
  19. package/dist/decoding/geometryDecoder.js +52 -49
  20. package/dist/decoding/geometryDecoder.js.map +1 -1
  21. package/dist/decoding/intWrapper.js +0 -1
  22. package/dist/decoding/intWrapper.js.map +1 -1
  23. package/dist/decoding/integerDecodingUtils.d.ts +33 -25
  24. package/dist/decoding/integerDecodingUtils.js +115 -52
  25. package/dist/decoding/integerDecodingUtils.js.map +1 -1
  26. package/dist/decoding/integerStreamDecoder.d.ts +15 -11
  27. package/dist/decoding/integerStreamDecoder.js +159 -65
  28. package/dist/decoding/integerStreamDecoder.js.map +1 -1
  29. package/dist/decoding/propertyDecoder.js +38 -36
  30. package/dist/decoding/propertyDecoder.js.map +1 -1
  31. package/dist/decoding/stringDecoder.js +19 -23
  32. package/dist/decoding/stringDecoder.js.map +1 -1
  33. package/dist/decoding/unpackNullableUtils.d.ts +2 -2
  34. package/dist/decoding/unpackNullableUtils.js.map +1 -1
  35. package/dist/encoding/bigEndianEncode.d.ts +7 -0
  36. package/dist/encoding/bigEndianEncode.js +16 -0
  37. package/dist/encoding/bigEndianEncode.js.map +1 -0
  38. package/dist/encoding/constGeometryVectorEncoder.d.ts +19 -0
  39. package/dist/encoding/constGeometryVectorEncoder.js +248 -0
  40. package/dist/encoding/constGeometryVectorEncoder.js.map +1 -0
  41. package/dist/encoding/encodingUtils.d.ts +2 -2
  42. package/dist/encoding/encodingUtils.js +3 -3
  43. package/dist/encoding/encodingUtils.js.map +1 -1
  44. package/dist/encoding/fastPforEncoder.d.ts +18 -0
  45. package/dist/encoding/fastPforEncoder.js +310 -0
  46. package/dist/encoding/fastPforEncoder.js.map +1 -0
  47. package/dist/encoding/integerEncodingUtils.d.ts +20 -20
  48. package/dist/encoding/integerEncodingUtils.js +64 -48
  49. package/dist/encoding/integerEncodingUtils.js.map +1 -1
  50. package/dist/encoding/integerStreamEncoder.d.ts +3 -2
  51. package/dist/encoding/integerStreamEncoder.js +57 -23
  52. package/dist/encoding/integerStreamEncoder.js.map +1 -1
  53. package/dist/encoding/packNullableUtils.d.ts +1 -1
  54. package/dist/encoding/packNullableUtils.js.map +1 -1
  55. package/dist/encoding/propertyEncoder.d.ts +1 -1
  56. package/dist/encoding/propertyEncoder.js +17 -24
  57. package/dist/encoding/propertyEncoder.js.map +1 -1
  58. package/dist/encoding/stringEncoder.js +9 -42
  59. package/dist/encoding/stringEncoder.js.map +1 -1
  60. package/dist/encoding/zOrderCurveEncoder.js +1 -1
  61. package/dist/encoding/zOrderCurveEncoder.js.map +1 -1
  62. package/dist/metadata/tile/logicalStreamType.d.ts +8 -12
  63. package/dist/metadata/tile/logicalStreamType.js +1 -19
  64. package/dist/metadata/tile/logicalStreamType.js.map +1 -1
  65. package/dist/metadata/tile/streamMetadataDecoder.d.ts +1 -1
  66. package/dist/metadata/tile/streamMetadataDecoder.js +9 -4
  67. package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
  68. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.d.ts +1 -1
  69. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
  70. package/dist/metadata/tileset/typeMap.d.ts +10 -2
  71. package/dist/metadata/tileset/typeMap.js +25 -15
  72. package/dist/metadata/tileset/typeMap.js.map +1 -1
  73. package/dist/mltDecoder.js +46 -47
  74. package/dist/mltDecoder.js.map +1 -1
  75. package/dist/mltMetadata.js.map +1 -1
  76. package/dist/vector/constant/int32ConstVector.d.ts +6 -0
  77. package/dist/vector/constant/int32ConstVector.js +10 -0
  78. package/dist/vector/constant/int32ConstVector.js.map +1 -0
  79. package/dist/vector/constant/int64ConstVector.d.ts +6 -0
  80. package/dist/vector/constant/int64ConstVector.js +10 -0
  81. package/dist/vector/constant/int64ConstVector.js.map +1 -0
  82. package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -2
  83. package/dist/vector/dictionary/stringDictionaryVector.js +0 -3
  84. package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
  85. package/dist/vector/featureTable.d.ts +7 -8
  86. package/dist/vector/featureTable.js +10 -42
  87. package/dist/vector/featureTable.js.map +1 -1
  88. package/dist/vector/filter/flatSelectionVector.d.ts +1 -1
  89. package/dist/vector/filter/flatSelectionVector.js +0 -2
  90. package/dist/vector/filter/flatSelectionVector.js.map +1 -1
  91. package/dist/vector/filter/selectionVectorUtils.d.ts +1 -1
  92. package/dist/vector/filter/selectionVectorUtils.js.map +1 -1
  93. package/dist/vector/filter/sequenceSelectionVector.d.ts +1 -1
  94. package/dist/vector/filter/sequenceSelectionVector.js +1 -5
  95. package/dist/vector/filter/sequenceSelectionVector.js.map +1 -1
  96. package/dist/vector/flat/bitVector.js +0 -2
  97. package/dist/vector/flat/bitVector.js.map +1 -1
  98. package/dist/vector/flat/booleanFlatVector.js +0 -1
  99. package/dist/vector/flat/booleanFlatVector.js.map +1 -1
  100. package/dist/vector/flat/{intFlatVector.d.ts → int32FlatVector.d.ts} +1 -1
  101. package/dist/vector/flat/{intFlatVector.js → int32FlatVector.js} +2 -2
  102. package/dist/vector/flat/int32FlatVector.js.map +1 -0
  103. package/dist/vector/flat/{longFlatVector.d.ts → int64FlatVector.d.ts} +1 -1
  104. package/dist/vector/flat/{longFlatVector.js → int64FlatVector.js} +2 -2
  105. package/dist/vector/flat/int64FlatVector.js.map +1 -0
  106. package/dist/vector/flat/stringFlatVector.d.ts +0 -1
  107. package/dist/vector/flat/stringFlatVector.js +0 -2
  108. package/dist/vector/flat/stringFlatVector.js.map +1 -1
  109. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -3
  110. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +0 -42
  111. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
  112. package/dist/vector/geometry/constGeometryVector.d.ts +5 -5
  113. package/dist/vector/geometry/constGeometryVector.js +1 -3
  114. package/dist/vector/geometry/constGeometryVector.js.map +1 -1
  115. package/dist/vector/geometry/constGpuVector.d.ts +4 -4
  116. package/dist/vector/geometry/constGpuVector.js +1 -3
  117. package/dist/vector/geometry/constGpuVector.js.map +1 -1
  118. package/dist/vector/geometry/flatGeometryVector.d.ts +4 -4
  119. package/dist/vector/geometry/flatGeometryVector.js +1 -5
  120. package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
  121. package/dist/vector/geometry/flatGpuVector.d.ts +3 -3
  122. package/dist/vector/geometry/flatGpuVector.js +0 -1
  123. package/dist/vector/geometry/flatGpuVector.js.map +1 -1
  124. package/dist/vector/geometry/geometryType.js.map +1 -1
  125. package/dist/vector/geometry/geometryVector.d.ts +7 -8
  126. package/dist/vector/geometry/geometryVector.js +0 -13
  127. package/dist/vector/geometry/geometryVector.js.map +1 -1
  128. package/dist/vector/geometry/geometryVectorConverter.d.ts +1 -1
  129. package/dist/vector/geometry/geometryVectorConverter.js +167 -211
  130. package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
  131. package/dist/vector/geometry/gpuVector.d.ts +6 -6
  132. package/dist/vector/geometry/gpuVector.js +0 -4
  133. package/dist/vector/geometry/gpuVector.js.map +1 -1
  134. package/dist/vector/geometry/topologyVector.d.ts +5 -9
  135. package/dist/vector/geometry/topologyVector.js +1 -19
  136. package/dist/vector/geometry/topologyVector.js.map +1 -1
  137. package/dist/vector/geometry/vertexBufferType.js.map +1 -1
  138. package/dist/vector/idVector.d.ts +8 -0
  139. package/dist/vector/idVector.js +2 -0
  140. package/dist/vector/idVector.js.map +1 -0
  141. package/dist/vector/sequence/{intSequenceVector.d.ts → int32SequenceVector.d.ts} +1 -1
  142. package/dist/vector/sequence/{intSequenceVector.js → int32SequenceVector.js} +2 -2
  143. package/dist/vector/sequence/int32SequenceVector.js.map +1 -0
  144. package/dist/vector/sequence/{longSequenceVector.d.ts → int64SequenceVector.d.ts} +1 -1
  145. package/dist/vector/sequence/{longSequenceVector.js → int64SequenceVector.js} +2 -2
  146. package/dist/vector/sequence/int64SequenceVector.js.map +1 -0
  147. package/dist/vector/sequence/sequenceVector.js +0 -1
  148. package/dist/vector/sequence/sequenceVector.js.map +1 -1
  149. package/dist/vector/variableSizeVector.js +0 -1
  150. package/dist/vector/variableSizeVector.js.map +1 -1
  151. package/dist/vector/vector.js +1 -5
  152. package/dist/vector/vector.js.map +1 -1
  153. package/dist/vector/vectorType.js.map +1 -1
  154. package/package.json +9 -10
  155. package/dist/decoding/decodingUtils.spec.d.ts +0 -1
  156. package/dist/decoding/decodingUtils.spec.js +0 -141
  157. package/dist/decoding/decodingUtils.spec.js.map +0 -1
  158. package/dist/decoding/fsstDecoder.spec.d.ts +0 -1
  159. package/dist/decoding/fsstDecoder.spec.js +0 -57
  160. package/dist/decoding/fsstDecoder.spec.js.map +0 -1
  161. package/dist/decoding/integerDecodingUtils.spec.d.ts +0 -1
  162. package/dist/decoding/integerDecodingUtils.spec.js +0 -300
  163. package/dist/decoding/integerDecodingUtils.spec.js.map +0 -1
  164. package/dist/decoding/integerStreamDecoder.spec.d.ts +0 -1
  165. package/dist/decoding/integerStreamDecoder.spec.js +0 -402
  166. package/dist/decoding/integerStreamDecoder.spec.js.map +0 -1
  167. package/dist/decoding/propertyDecoder.spec.d.ts +0 -1
  168. package/dist/decoding/propertyDecoder.spec.js +0 -448
  169. package/dist/decoding/propertyDecoder.spec.js.map +0 -1
  170. package/dist/decoding/stringDecoder.spec.d.ts +0 -1
  171. package/dist/decoding/stringDecoder.spec.js +0 -387
  172. package/dist/decoding/stringDecoder.spec.js.map +0 -1
  173. package/dist/decoding/unpackNullableUtils.spec.d.ts +0 -1
  174. package/dist/decoding/unpackNullableUtils.spec.js +0 -71
  175. package/dist/decoding/unpackNullableUtils.spec.js.map +0 -1
  176. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.d.ts +0 -1
  177. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js +0 -142
  178. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js.map +0 -1
  179. package/dist/mltDecoder.spec.d.ts +0 -1
  180. package/dist/mltDecoder.spec.js +0 -152
  181. package/dist/mltDecoder.spec.js.map +0 -1
  182. package/dist/vector/constant/intConstVector.d.ts +0 -6
  183. package/dist/vector/constant/intConstVector.js +0 -10
  184. package/dist/vector/constant/intConstVector.js.map +0 -1
  185. package/dist/vector/constant/longConstVector.d.ts +0 -6
  186. package/dist/vector/constant/longConstVector.js +0 -10
  187. package/dist/vector/constant/longConstVector.js.map +0 -1
  188. package/dist/vector/filter/flatSelectionVector.spec.d.ts +0 -1
  189. package/dist/vector/filter/flatSelectionVector.spec.js +0 -51
  190. package/dist/vector/filter/flatSelectionVector.spec.js.map +0 -1
  191. package/dist/vector/filter/selectionVectorUtil.spec.d.ts +0 -1
  192. package/dist/vector/filter/selectionVectorUtil.spec.js +0 -154
  193. package/dist/vector/filter/selectionVectorUtil.spec.js.map +0 -1
  194. package/dist/vector/filter/sequenceSelectionVector.spec.d.ts +0 -1
  195. package/dist/vector/filter/sequenceSelectionVector.spec.js +0 -115
  196. package/dist/vector/filter/sequenceSelectionVector.spec.js.map +0 -1
  197. package/dist/vector/flat/floatFlatVector.spec.d.ts +0 -1
  198. package/dist/vector/flat/floatFlatVector.spec.js +0 -14
  199. package/dist/vector/flat/floatFlatVector.spec.js.map +0 -1
  200. package/dist/vector/flat/intFlatVector.js.map +0 -1
  201. package/dist/vector/flat/intFlatVector.spec.d.ts +0 -1
  202. package/dist/vector/flat/intFlatVector.spec.js +0 -15
  203. package/dist/vector/flat/intFlatVector.spec.js.map +0 -1
  204. package/dist/vector/flat/longFlatVector.js.map +0 -1
  205. package/dist/vector/flat/longFlatVector.spec.d.ts +0 -1
  206. package/dist/vector/flat/longFlatVector.spec.js +0 -14
  207. package/dist/vector/flat/longFlatVector.spec.js.map +0 -1
  208. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.d.ts +0 -1
  209. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js +0 -28
  210. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js.map +0 -1
  211. package/dist/vector/geometry/zOrderCurve.spec.d.ts +0 -1
  212. package/dist/vector/geometry/zOrderCurve.spec.js +0 -25
  213. package/dist/vector/geometry/zOrderCurve.spec.js.map +0 -1
  214. package/dist/vector/intVector.d.ts +0 -8
  215. package/dist/vector/intVector.js +0 -2
  216. package/dist/vector/intVector.js.map +0 -1
  217. package/dist/vector/sequence/intSequenceVector.js.map +0 -1
  218. package/dist/vector/sequence/longSequenceVector.js.map +0 -1
  219. package/dist/vector/sequence/longSequenceVektor.spec.d.ts +0 -1
  220. package/dist/vector/sequence/longSequenceVektor.spec.js +0 -11
  221. package/dist/vector/sequence/longSequenceVektor.spec.js.map +0 -1
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Decodes big-endian bytes into `out` without allocating the output buffer.
3
+ *
4
+ * This function does not copy `bytes`; it writes decoded words into the provided `out` array.
5
+ * For aligned inputs it may create a temporary typed-array view (`Uint32Array`) over `bytes.buffer`
6
+ * to speed up decoding.
7
+ *
8
+ * If `byteLength` is not a multiple of 4, the final word is padded with zeros.
9
+ *
10
+ * @returns Number of int32 words written.
11
+ * @throws RangeError If `(offset, byteLength)` is out of bounds, or if `out` is too small.
12
+ */
13
+ export declare function decodeBigEndianInt32sInto(bytes: Uint8Array, offset: number, byteLength: number, out: Uint32Array): number;
@@ -0,0 +1,50 @@
1
+ import { bswap32 } from "./fastPforShared";
2
+ /**
3
+ * Decodes big-endian bytes into `out` without allocating the output buffer.
4
+ *
5
+ * This function does not copy `bytes`; it writes decoded words into the provided `out` array.
6
+ * For aligned inputs it may create a temporary typed-array view (`Uint32Array`) over `bytes.buffer`
7
+ * to speed up decoding.
8
+ *
9
+ * If `byteLength` is not a multiple of 4, the final word is padded with zeros.
10
+ *
11
+ * @returns Number of int32 words written.
12
+ * @throws RangeError If `(offset, byteLength)` is out of bounds, or if `out` is too small.
13
+ */
14
+ export function decodeBigEndianInt32sInto(bytes, offset, byteLength, out) {
15
+ if (offset < 0 || byteLength < 0 || offset + byteLength > bytes.length) {
16
+ throw new RangeError(`decodeBigEndianInt32sInto: out of bounds (offset=${offset}, byteLength=${byteLength}, bytes.length=${bytes.length})`);
17
+ }
18
+ const numCompleteInts = Math.floor(byteLength / 4);
19
+ const hasTrailingBytes = byteLength % 4 !== 0;
20
+ const numInts = hasTrailingBytes ? numCompleteInts + 1 : numCompleteInts;
21
+ if (out.length < numInts) {
22
+ throw new RangeError(`decodeBigEndianInt32sInto: out.length=${out.length} < ${numInts}`);
23
+ }
24
+ if (numCompleteInts > 0) {
25
+ const absoluteOffset = bytes.byteOffset + offset;
26
+ if ((absoluteOffset & 3) === 0) {
27
+ const u32 = new Uint32Array(bytes.buffer, absoluteOffset, numCompleteInts);
28
+ for (let i = 0; i < numCompleteInts; i++) {
29
+ out[i] = bswap32(u32[i]) | 0;
30
+ }
31
+ }
32
+ else {
33
+ for (let i = 0; i < numCompleteInts; i++) {
34
+ const base = offset + i * 4;
35
+ out[i] = (bytes[base] << 24) | (bytes[base + 1] << 16) | (bytes[base + 2] << 8) | bytes[base + 3] | 0;
36
+ }
37
+ }
38
+ }
39
+ if (hasTrailingBytes) {
40
+ const base = offset + numCompleteInts * 4;
41
+ const remaining = byteLength - numCompleteInts * 4;
42
+ let v = 0;
43
+ for (let i = 0; i < remaining; i++) {
44
+ v |= bytes[base + i] << (24 - i * 8);
45
+ }
46
+ out[numCompleteInts] = v | 0;
47
+ }
48
+ return numInts;
49
+ }
50
+ //# sourceMappingURL=bigEndianDecode.js.map
@@ -0,0 +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,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, type 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
  */
@@ -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,
@@ -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, type 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: number = 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(\n offsetIndices: number[],\n presentValues: boolean[],\n isPresent: boolean = true,\n): 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 }>,\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 ?? {},\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"]}
@@ -86,7 +86,9 @@ function readUtf8(buf, pos, end) {
86
86
  let bytesPerSequence = b0 > 0xef ? 4 : b0 > 0xdf ? 3 : b0 > 0xbf ? 2 : 1;
87
87
  if (i + bytesPerSequence > end)
88
88
  break;
89
- let b1, b2, b3;
89
+ let b1;
90
+ let b2;
91
+ let b3;
90
92
  if (bytesPerSequence === 1) {
91
93
  if (b0 < 0x80) {
92
94
  c = b0;
@@ -139,7 +141,7 @@ function readUtf8(buf, pos, end) {
139
141
  export function getVectorTypeBooleanStream(numFeatures, byteLength, data, offset) {
140
142
  const valuesPerRun = 0x83;
141
143
  // TODO: use VectorType metadata field for to test which VectorType is used
142
- return Math.ceil(numFeatures / valuesPerRun) * 2 == byteLength &&
144
+ return Math.ceil(numFeatures / valuesPerRun) * 2 === byteLength &&
143
145
  /* Test the first value byte if all bits are set to true */
144
146
  (data[offset.get() + 1] & 0xff) === (bitCount(numFeatures) << 2) - 1
145
147
  ? VectorType.CONST
@@ -1 +1 @@
1
- {"version":3,"file":"decodingUtils.js","sourceRoot":"","sources":["../../src/decoding/decodingUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE9E,MAAM,UAAU,UAAU,CAAC,UAAkB,EAAE,IAAgB,EAAE,MAAkB;IAC/E,mDAAmD;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC5B,MAAkB,EAClB,WAAmB,EACnB,UAAkB,EAClB,GAAe,EACf,iBAA6B;IAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAEhE,IAAI,iBAAiB,EAAE,CAAC;QACpB,OAAO,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAkB,EAAE,QAAgB,EAAE,UAAkB,EAAE,GAAe;IACnG,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IAExC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;IAE5C,OAAO,WAAW,GAAG,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,YAAY,EAAE,CAAC;YAC5B,MAAM;QACV,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QACvC,UAAU;QACV,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC;YAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YACtC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;YAChD,WAAW,GAAG,cAAc,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,cAAc;YACd,MAAM,WAAW,GAAG,GAAG,GAAG,MAAM,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,IAAI,WAAW,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7D,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;IACL,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACtB,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,aAAyB,EACzB,GAAe,EACf,SAAiB,EACjB,iBAA6B;IAE7B,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC,iBAAiB,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IACpF,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEnB,IAAI,iBAAiB,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAC3B,aAAyB,EACzB,GAAe,EACf,SAAiB,EACjB,iBAA6B;IAE7B,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC,iBAAiB,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IACpF,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEnB,IAAI,iBAAiB,EAAE,CAAC;QACpB,OAAO,cAAc,CAAC,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAED,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,eAAe,GAAG,IAAI,WAAW,EAAE,CAAC;AAE1C,mDAAmD;AACnD,MAAM,UAAU,YAAY,CAAC,GAAe,EAAE,GAAW,EAAE,GAAW;IAClE,IAAI,GAAG,GAAG,GAAG,IAAI,uBAAuB,EAAE,CAAC;QACvC,oEAAoE;QACpE,OAAO,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,oDAAoD;IACpD,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG;IAC3B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,GAAG,GAAG,CAAC;IAEZ,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,YAAY;QAC1B,IAAI,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,GAAG,gBAAgB,GAAG,GAAG;YAAE,MAAM;QAEtC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAEf,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;gBACZ,CAAC,GAAG,EAAE,CAAC;YACX,CAAC;QACL,CAAC;aAAM,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;YAChC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;gBACvC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;oBACZ,CAAC,GAAG,IAAI,CAAC;gBACb,CAAC;YACL,CAAC;QACL,CAAC;aAAM,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;YAChC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/C,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;gBAC7D,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;oBAC7C,CAAC,GAAG,IAAI,CAAC;gBACb,CAAC;YACL,CAAC;QACL,CAAC;aAAM,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;YAChC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;gBACrF,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;oBAC/B,CAAC,GAAG,IAAI,CAAC;gBACb,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACb,CAAC,GAAG,MAAM,CAAC;YACX,gBAAgB,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;YACpB,CAAC,IAAI,OAAO,CAAC;YACb,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC;YAC1D,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC,IAAI,gBAAgB,CAAC;IAC1B,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CACtC,WAAmB,EACnB,UAAkB,EAClB,IAAgB,EAChB,MAAkB;IAElB,MAAM,YAAY,GAAG,IAAI,CAAC;IAC1B,2EAA2E;IAC3E,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,UAAU;QAC1D,2DAA2D;QAC3D,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;QACpE,CAAC,CAAC,UAAU,CAAC,KAAK;QAClB,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1B,CAAC;AAED,SAAS,QAAQ,CAAC,MAAM;IACpB,oDAAoD;IACpD,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC","sourcesContent":["import type IntWrapper from \"./intWrapper\";\nimport { VectorType } from \"../vector/vectorType\";\nimport type BitVector from \"../vector/flat/bitVector\";\nimport { decodeStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport { unpackNullableBoolean, unpackNullable } from \"./unpackNullableUtils\";\n\nexport function skipColumn(numStreams: number, tile: Uint8Array, offset: IntWrapper) {\n //TODO: add size of column in Mlt for fast skipping\n for (let i = 0; i < numStreams; i++) {\n const streamMetadata = decodeStreamMetadata(tile, offset);\n offset.add(streamMetadata.byteLength);\n }\n}\n\nexport function decodeBooleanRle(\n buffer: Uint8Array,\n numBooleans: number,\n byteLength: number,\n pos: IntWrapper,\n nullabilityBuffer?: BitVector,\n): Uint8Array {\n const numBytes = Math.ceil(numBooleans / 8.0);\n const values = decodeByteRle(buffer, numBytes, byteLength, pos);\n\n if (nullabilityBuffer) {\n return unpackNullableBoolean(values, numBooleans, nullabilityBuffer);\n }\n\n return values;\n}\n\nexport function decodeByteRle(buffer: Uint8Array, numBytes: number, byteLength: number, pos: IntWrapper): Uint8Array {\n const values = new Uint8Array(numBytes);\n\n let valueOffset = 0;\n const streamEndPos = pos.get() + byteLength;\n\n while (valueOffset < numBytes) {\n if (pos.get() >= streamEndPos) {\n break;\n }\n\n const header = buffer[pos.increment()];\n /* Runs */\n if (header <= 0x7f) {\n const numRuns = header + 3;\n const value = buffer[pos.increment()];\n const endValueOffset = Math.min(valueOffset + numRuns, numBytes);\n values.fill(value, valueOffset, endValueOffset);\n valueOffset = endValueOffset;\n } else {\n /* Literals */\n const numLiterals = 256 - header;\n for (let i = 0; i < numLiterals && valueOffset < numBytes; i++) {\n values[valueOffset++] = buffer[pos.increment()];\n }\n }\n }\n pos.set(streamEndPos);\n return values;\n}\n\nexport function decodeFloatsLE(\n encodedValues: Uint8Array,\n pos: IntWrapper,\n numValues: number,\n nullabilityBuffer?: BitVector,\n): Float32Array {\n const currentPos = pos.get();\n const newOffset = currentPos + numValues * Float32Array.BYTES_PER_ELEMENT;\n const newBuf = new Uint8Array(encodedValues.subarray(currentPos, newOffset)).buffer;\n const fb = new Float32Array(newBuf);\n pos.set(newOffset);\n\n if (nullabilityBuffer) {\n return unpackNullable(fb, nullabilityBuffer, 0);\n }\n\n return fb;\n}\n\nexport function decodeDoublesLE(\n encodedValues: Uint8Array,\n pos: IntWrapper,\n numValues: number,\n nullabilityBuffer?: BitVector,\n): Float64Array {\n const currentPos = pos.get();\n const newOffset = currentPos + numValues * Float64Array.BYTES_PER_ELEMENT;\n const newBuf = new Uint8Array(encodedValues.subarray(currentPos, newOffset)).buffer;\n const fb = new Float64Array(newBuf);\n pos.set(newOffset);\n\n if (nullabilityBuffer) {\n return unpackNullable(fb, nullabilityBuffer, 0);\n }\n\n return fb;\n}\n\nconst TEXT_DECODER_MIN_LENGTH = 12;\nconst utf8TextDecoder = new TextDecoder();\n\n// Source: https://github.com/mapbox/pbf/issues/106\nexport function decodeString(buf: Uint8Array, pos: number, end: number): string {\n if (end - pos >= TEXT_DECODER_MIN_LENGTH) {\n // longer strings are fast with the built-in browser TextDecoder API\n return utf8TextDecoder.decode(buf.subarray(pos, end));\n }\n // short strings are fast with custom implementation\n return readUtf8(buf, pos, end);\n}\n\nfunction readUtf8(buf, pos, end): string {\n let str = \"\";\n let i = pos;\n\n while (i < end) {\n const b0 = buf[i];\n let c = null; // codepoint\n let bytesPerSequence = b0 > 0xef ? 4 : b0 > 0xdf ? 3 : b0 > 0xbf ? 2 : 1;\n\n if (i + bytesPerSequence > end) break;\n\n let b1, b2, b3;\n\n if (bytesPerSequence === 1) {\n if (b0 < 0x80) {\n c = b0;\n }\n } else if (bytesPerSequence === 2) {\n b1 = buf[i + 1];\n if ((b1 & 0xc0) === 0x80) {\n c = ((b0 & 0x1f) << 0x6) | (b1 & 0x3f);\n if (c <= 0x7f) {\n c = null;\n }\n }\n } else if (bytesPerSequence === 3) {\n b1 = buf[i + 1];\n b2 = buf[i + 2];\n if ((b1 & 0xc0) === 0x80 && (b2 & 0xc0) === 0x80) {\n c = ((b0 & 0xf) << 0xc) | ((b1 & 0x3f) << 0x6) | (b2 & 0x3f);\n if (c <= 0x7ff || (c >= 0xd800 && c <= 0xdfff)) {\n c = null;\n }\n }\n } else if (bytesPerSequence === 4) {\n b1 = buf[i + 1];\n b2 = buf[i + 2];\n b3 = buf[i + 3];\n if ((b1 & 0xc0) === 0x80 && (b2 & 0xc0) === 0x80 && (b3 & 0xc0) === 0x80) {\n c = ((b0 & 0xf) << 0x12) | ((b1 & 0x3f) << 0xc) | ((b2 & 0x3f) << 0x6) | (b3 & 0x3f);\n if (c <= 0xffff || c >= 0x110000) {\n c = null;\n }\n }\n }\n\n if (c === null) {\n c = 0xfffd;\n bytesPerSequence = 1;\n } else if (c > 0xffff) {\n c -= 0x10000;\n str += String.fromCharCode(((c >>> 10) & 0x3ff) | 0xd800);\n c = 0xdc00 | (c & 0x3ff);\n }\n\n str += String.fromCharCode(c);\n i += bytesPerSequence;\n }\n\n return str;\n}\n\nexport function getVectorTypeBooleanStream(\n numFeatures: number,\n byteLength: number,\n data: Uint8Array,\n offset: IntWrapper,\n): VectorType {\n const valuesPerRun = 0x83;\n // TODO: use VectorType metadata field for to test which VectorType is used\n return Math.ceil(numFeatures / valuesPerRun) * 2 == byteLength &&\n /* Test the first value byte if all bits are set to true */\n (data[offset.get() + 1] & 0xff) === (bitCount(numFeatures) << 2) - 1\n ? VectorType.CONST\n : VectorType.FLAT;\n}\n\nfunction bitCount(number): number {\n //TODO: refactor to get rid of special case handling\n return number === 0 ? 1 : Math.floor(Math.log2(number) + 1);\n}\n"]}
1
+ {"version":3,"file":"decodingUtils.js","sourceRoot":"","sources":["../../src/decoding/decodingUtils.ts"],"names":[],"mappings":"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","sourcesContent":["import type IntWrapper from \"./intWrapper\";\nimport { VectorType } from \"../vector/vectorType\";\nimport type BitVector from \"../vector/flat/bitVector\";\nimport { decodeStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport { unpackNullableBoolean, unpackNullable } from \"./unpackNullableUtils\";\n\nexport function skipColumn(numStreams: number, tile: Uint8Array, offset: IntWrapper) {\n //TODO: add size of column in Mlt for fast skipping\n for (let i = 0; i < numStreams; i++) {\n const streamMetadata = decodeStreamMetadata(tile, offset);\n offset.add(streamMetadata.byteLength);\n }\n}\n\nexport function decodeBooleanRle(\n buffer: Uint8Array,\n numBooleans: number,\n byteLength: number,\n pos: IntWrapper,\n nullabilityBuffer?: BitVector,\n): Uint8Array {\n const numBytes = Math.ceil(numBooleans / 8.0);\n const values = decodeByteRle(buffer, numBytes, byteLength, pos);\n\n if (nullabilityBuffer) {\n return unpackNullableBoolean(values, numBooleans, nullabilityBuffer);\n }\n\n return values;\n}\n\nexport function decodeByteRle(buffer: Uint8Array, numBytes: number, byteLength: number, pos: IntWrapper): Uint8Array {\n const values = new Uint8Array(numBytes);\n\n let valueOffset = 0;\n const streamEndPos = pos.get() + byteLength;\n\n while (valueOffset < numBytes) {\n if (pos.get() >= streamEndPos) {\n break;\n }\n\n const header = buffer[pos.increment()];\n /* Runs */\n if (header <= 0x7f) {\n const numRuns = header + 3;\n const value = buffer[pos.increment()];\n const endValueOffset = Math.min(valueOffset + numRuns, numBytes);\n values.fill(value, valueOffset, endValueOffset);\n valueOffset = endValueOffset;\n } else {\n /* Literals */\n const numLiterals = 256 - header;\n for (let i = 0; i < numLiterals && valueOffset < numBytes; i++) {\n values[valueOffset++] = buffer[pos.increment()];\n }\n }\n }\n pos.set(streamEndPos);\n return values;\n}\n\nexport function decodeFloatsLE(\n encodedValues: Uint8Array,\n pos: IntWrapper,\n numValues: number,\n nullabilityBuffer?: BitVector,\n): Float32Array {\n const currentPos = pos.get();\n const newOffset = currentPos + numValues * Float32Array.BYTES_PER_ELEMENT;\n const newBuf = new Uint8Array(encodedValues.subarray(currentPos, newOffset)).buffer;\n const fb = new Float32Array(newBuf);\n pos.set(newOffset);\n\n if (nullabilityBuffer) {\n return unpackNullable(fb, nullabilityBuffer, 0);\n }\n\n return fb;\n}\n\nexport function decodeDoublesLE(\n encodedValues: Uint8Array,\n pos: IntWrapper,\n numValues: number,\n nullabilityBuffer?: BitVector,\n): Float64Array {\n const currentPos = pos.get();\n const newOffset = currentPos + numValues * Float64Array.BYTES_PER_ELEMENT;\n const newBuf = new Uint8Array(encodedValues.subarray(currentPos, newOffset)).buffer;\n const fb = new Float64Array(newBuf);\n pos.set(newOffset);\n\n if (nullabilityBuffer) {\n return unpackNullable(fb, nullabilityBuffer, 0);\n }\n\n return fb;\n}\n\nconst TEXT_DECODER_MIN_LENGTH = 12;\nconst utf8TextDecoder = new TextDecoder();\n\n// Source: https://github.com/mapbox/pbf/issues/106\nexport function decodeString(buf: Uint8Array, pos: number, end: number): string {\n if (end - pos >= TEXT_DECODER_MIN_LENGTH) {\n // longer strings are fast with the built-in browser TextDecoder API\n return utf8TextDecoder.decode(buf.subarray(pos, end));\n }\n // short strings are fast with custom implementation\n return readUtf8(buf, pos, end);\n}\n\nfunction readUtf8(buf, pos, end): string {\n let str = \"\";\n let i = pos;\n\n while (i < end) {\n const b0 = buf[i];\n let c = null; // codepoint\n let bytesPerSequence = b0 > 0xef ? 4 : b0 > 0xdf ? 3 : b0 > 0xbf ? 2 : 1;\n\n if (i + bytesPerSequence > end) break;\n\n let b1;\n let b2;\n let b3;\n\n if (bytesPerSequence === 1) {\n if (b0 < 0x80) {\n c = b0;\n }\n } else if (bytesPerSequence === 2) {\n b1 = buf[i + 1];\n if ((b1 & 0xc0) === 0x80) {\n c = ((b0 & 0x1f) << 0x6) | (b1 & 0x3f);\n if (c <= 0x7f) {\n c = null;\n }\n }\n } else if (bytesPerSequence === 3) {\n b1 = buf[i + 1];\n b2 = buf[i + 2];\n if ((b1 & 0xc0) === 0x80 && (b2 & 0xc0) === 0x80) {\n c = ((b0 & 0xf) << 0xc) | ((b1 & 0x3f) << 0x6) | (b2 & 0x3f);\n if (c <= 0x7ff || (c >= 0xd800 && c <= 0xdfff)) {\n c = null;\n }\n }\n } else if (bytesPerSequence === 4) {\n b1 = buf[i + 1];\n b2 = buf[i + 2];\n b3 = buf[i + 3];\n if ((b1 & 0xc0) === 0x80 && (b2 & 0xc0) === 0x80 && (b3 & 0xc0) === 0x80) {\n c = ((b0 & 0xf) << 0x12) | ((b1 & 0x3f) << 0xc) | ((b2 & 0x3f) << 0x6) | (b3 & 0x3f);\n if (c <= 0xffff || c >= 0x110000) {\n c = null;\n }\n }\n }\n\n if (c === null) {\n c = 0xfffd;\n bytesPerSequence = 1;\n } else if (c > 0xffff) {\n c -= 0x10000;\n str += String.fromCharCode(((c >>> 10) & 0x3ff) | 0xd800);\n c = 0xdc00 | (c & 0x3ff);\n }\n\n str += String.fromCharCode(c);\n i += bytesPerSequence;\n }\n\n return str;\n}\n\nexport function getVectorTypeBooleanStream(\n numFeatures: number,\n byteLength: number,\n data: Uint8Array,\n offset: IntWrapper,\n): VectorType {\n const valuesPerRun = 0x83;\n // TODO: use VectorType metadata field for to test which VectorType is used\n return Math.ceil(numFeatures / valuesPerRun) * 2 === byteLength &&\n /* Test the first value byte if all bits are set to true */\n (data[offset.get() + 1] & 0xff) === (bitCount(numFeatures) << 2) - 1\n ? VectorType.CONST\n : VectorType.FLAT;\n}\n\nfunction bitCount(number): number {\n //TODO: refactor to get rid of special case handling\n return number === 0 ? 1 : Math.floor(Math.log2(number) + 1);\n}\n"]}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * FastPFOR decoding implementation.
3
+ *
4
+ * @remarks
5
+ * Terminology note: "exceptions" in FastPFOR refer to **outlier values** within a block that do not fit in the
6
+ * chosen base bit-width for that block. These are stored in separate "exception streams" and later applied back
7
+ * to the unpacked base values. This is unrelated to JavaScript/TypeScript runtime exceptions.
8
+ */
9
+ /**
10
+ * Workspace for the FastPFOR decoder.
11
+ */
12
+ export type FastPforDecoderWorkspace = {
13
+ dataToBePacked: Array<Uint32Array>;
14
+ dataPointers: Int32Array;
15
+ byteContainer: Uint8Array;
16
+ byteContainerI32?: Int32Array;
17
+ exceptionSizes: Int32Array;
18
+ };
19
+ /**
20
+ * Workspace for decoding the FastPFOR *wire format* (big-endian int32 words).
21
+ *
22
+ * @remarks
23
+ * This workspace owns:
24
+ * - a scratch `encodedWords` buffer to materialize big-endian words
25
+ * - the reusable `FastPforDecoderWorkspace` used by `decodeFastPforInt32`
26
+ *
27
+ * The caller is responsible for creating and reusing this object.
28
+ */
29
+ export type FastPforWireDecodeWorkspace = {
30
+ encodedWords: Uint32Array;
31
+ decoderWorkspace: FastPforDecoderWorkspace;
32
+ };
33
+ /**
34
+ * Creates an isolated workspace for decoding.
35
+ * Reusing a workspace across calls avoids repeated allocations.
36
+ */
37
+ export declare function createDecoderWorkspace(): FastPforDecoderWorkspace;
38
+ export declare function createFastPforWireDecodeWorkspace(initialEncodedWordCapacity?: number): FastPforWireDecodeWorkspace;
39
+ export declare function ensureFastPforWireEncodedWordsCapacity(workspace: FastPforWireDecodeWorkspace, requiredWordCount: number): Uint32Array;
40
+ /**
41
+ * Decodes a sequence of FastPFOR-encoded integers.
42
+ *
43
+ * @param encoded The input buffer containing FastPFOR encoded data.
44
+ * @param numValues The number of integers expected to be decoded.
45
+ * @param workspace Optional workspace for reuse across calls. If omitted, a new workspace is created per call.
46
+ */
47
+ export declare function decodeFastPforInt32(encoded: Uint32Array, numValues: number, workspace?: FastPforDecoderWorkspace): Uint32Array;