@maplibre/mlt 1.1.6 → 1.1.7

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 (173) 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 +1 -1
  5. package/dist/decoding/decodingTestUtils.js.map +1 -1
  6. package/dist/decoding/decodingUtils.js +4 -2
  7. package/dist/decoding/decodingUtils.js.map +1 -1
  8. package/dist/decoding/fastPforDecoder.d.ts +48 -0
  9. package/dist/decoding/fastPforDecoder.js +482 -0
  10. package/dist/decoding/fastPforDecoder.js.map +1 -0
  11. package/dist/decoding/fastPforShared.d.ts +9 -0
  12. package/dist/decoding/fastPforShared.js +29 -0
  13. package/dist/decoding/fastPforShared.js.map +1 -0
  14. package/dist/decoding/fastPforUnpack.d.ts +23 -0
  15. package/dist/decoding/fastPforUnpack.js +910 -0
  16. package/dist/decoding/fastPforUnpack.js.map +1 -0
  17. package/dist/decoding/geometryDecoder.d.ts +2 -2
  18. package/dist/decoding/geometryDecoder.js +11 -8
  19. package/dist/decoding/geometryDecoder.js.map +1 -1
  20. package/dist/decoding/integerDecodingUtils.d.ts +14 -10
  21. package/dist/decoding/integerDecodingUtils.js +44 -22
  22. package/dist/decoding/integerDecodingUtils.js.map +1 -1
  23. package/dist/decoding/integerStreamDecoder.d.ts +1 -1
  24. package/dist/decoding/integerStreamDecoder.js +13 -6
  25. package/dist/decoding/integerStreamDecoder.js.map +1 -1
  26. package/dist/decoding/propertyDecoder.js +10 -14
  27. package/dist/decoding/propertyDecoder.js.map +1 -1
  28. package/dist/decoding/stringDecoder.js +1 -4
  29. package/dist/decoding/stringDecoder.js.map +1 -1
  30. package/dist/encoding/bigEndianEncode.d.ts +7 -0
  31. package/dist/encoding/bigEndianEncode.js +16 -0
  32. package/dist/encoding/bigEndianEncode.js.map +1 -0
  33. package/dist/encoding/constGeometryVectorEncoder.d.ts +19 -0
  34. package/dist/encoding/constGeometryVectorEncoder.js +248 -0
  35. package/dist/encoding/constGeometryVectorEncoder.js.map +1 -0
  36. package/dist/encoding/encodingUtils.d.ts +1 -1
  37. package/dist/encoding/encodingUtils.js +2 -2
  38. package/dist/encoding/encodingUtils.js.map +1 -1
  39. package/dist/encoding/fastPforEncoder.d.ts +19 -0
  40. package/dist/encoding/fastPforEncoder.js +310 -0
  41. package/dist/encoding/fastPforEncoder.js.map +1 -0
  42. package/dist/encoding/integerEncodingUtils.d.ts +7 -7
  43. package/dist/encoding/integerEncodingUtils.js +25 -17
  44. package/dist/encoding/integerEncodingUtils.js.map +1 -1
  45. package/dist/encoding/integerStreamEncoder.d.ts +1 -1
  46. package/dist/encoding/integerStreamEncoder.js +5 -5
  47. package/dist/encoding/integerStreamEncoder.js.map +1 -1
  48. package/dist/encoding/packNullableUtils.d.ts +1 -1
  49. package/dist/encoding/packNullableUtils.js.map +1 -1
  50. package/dist/encoding/propertyEncoder.d.ts +1 -1
  51. package/dist/encoding/propertyEncoder.js +8 -8
  52. package/dist/encoding/propertyEncoder.js.map +1 -1
  53. package/dist/encoding/stringEncoder.js +3 -3
  54. package/dist/encoding/stringEncoder.js.map +1 -1
  55. package/dist/encoding/zOrderCurveEncoder.js +1 -1
  56. package/dist/encoding/zOrderCurveEncoder.js.map +1 -1
  57. package/dist/metadata/tile/logicalStreamType.d.ts +3 -3
  58. package/dist/metadata/tile/logicalStreamType.js.map +1 -1
  59. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.d.ts +1 -1
  60. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
  61. package/dist/metadata/tileset/typeMap.d.ts +10 -2
  62. package/dist/metadata/tileset/typeMap.js +25 -15
  63. package/dist/metadata/tileset/typeMap.js.map +1 -1
  64. package/dist/mltDecoder.js +29 -26
  65. package/dist/mltDecoder.js.map +1 -1
  66. package/dist/mltMetadata.js.map +1 -1
  67. package/dist/vector/constant/intConstVector.d.ts +1 -1
  68. package/dist/vector/constant/intConstVector.js +1 -1
  69. package/dist/vector/constant/intConstVector.js.map +1 -1
  70. package/dist/vector/constant/longConstVector.d.ts +1 -1
  71. package/dist/vector/constant/longConstVector.js +1 -1
  72. package/dist/vector/constant/longConstVector.js.map +1 -1
  73. package/dist/vector/dictionary/stringDictionaryVector.d.ts +0 -1
  74. package/dist/vector/dictionary/stringDictionaryVector.js +0 -2
  75. package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
  76. package/dist/vector/featureTable.d.ts +4 -5
  77. package/dist/vector/featureTable.js +2 -29
  78. package/dist/vector/featureTable.js.map +1 -1
  79. package/dist/vector/filter/flatSelectionVector.d.ts +1 -1
  80. package/dist/vector/filter/flatSelectionVector.js.map +1 -1
  81. package/dist/vector/filter/selectionVectorUtils.d.ts +1 -1
  82. package/dist/vector/filter/selectionVectorUtils.js.map +1 -1
  83. package/dist/vector/filter/sequenceSelectionVector.d.ts +1 -1
  84. package/dist/vector/filter/sequenceSelectionVector.js.map +1 -1
  85. package/dist/vector/flat/stringFlatVector.d.ts +0 -1
  86. package/dist/vector/flat/stringFlatVector.js +0 -2
  87. package/dist/vector/flat/stringFlatVector.js.map +1 -1
  88. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +0 -2
  89. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +0 -36
  90. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
  91. package/dist/vector/geometry/constGeometryVector.d.ts +2 -2
  92. package/dist/vector/geometry/constGeometryVector.js +1 -1
  93. package/dist/vector/geometry/constGeometryVector.js.map +1 -1
  94. package/dist/vector/geometry/constGpuVector.d.ts +2 -2
  95. package/dist/vector/geometry/constGpuVector.js +1 -1
  96. package/dist/vector/geometry/constGpuVector.js.map +1 -1
  97. package/dist/vector/geometry/flatGeometryVector.d.ts +1 -1
  98. package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
  99. package/dist/vector/geometry/flatGpuVector.d.ts +1 -1
  100. package/dist/vector/geometry/flatGpuVector.js.map +1 -1
  101. package/dist/vector/geometry/geometryType.js.map +1 -1
  102. package/dist/vector/geometry/geometryVector.d.ts +4 -5
  103. package/dist/vector/geometry/geometryVector.js +0 -8
  104. package/dist/vector/geometry/geometryVector.js.map +1 -1
  105. package/dist/vector/geometry/geometryVectorConverter.d.ts +1 -1
  106. package/dist/vector/geometry/geometryVectorConverter.js +167 -211
  107. package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
  108. package/dist/vector/geometry/gpuVector.d.ts +2 -2
  109. package/dist/vector/geometry/gpuVector.js.map +1 -1
  110. package/dist/vector/geometry/topologyVector.d.ts +5 -9
  111. package/dist/vector/geometry/topologyVector.js +1 -19
  112. package/dist/vector/geometry/topologyVector.js.map +1 -1
  113. package/dist/vector/geometry/vertexBufferType.js.map +1 -1
  114. package/dist/vector/intVector.d.ts +7 -7
  115. package/dist/vector/intVector.js.map +1 -1
  116. package/dist/vector/vector.js +1 -1
  117. package/dist/vector/vector.js.map +1 -1
  118. package/dist/vector/vectorType.js.map +1 -1
  119. package/package.json +9 -10
  120. package/dist/decoding/decodingUtils.spec.d.ts +0 -1
  121. package/dist/decoding/decodingUtils.spec.js +0 -141
  122. package/dist/decoding/decodingUtils.spec.js.map +0 -1
  123. package/dist/decoding/fsstDecoder.spec.d.ts +0 -1
  124. package/dist/decoding/fsstDecoder.spec.js +0 -57
  125. package/dist/decoding/fsstDecoder.spec.js.map +0 -1
  126. package/dist/decoding/integerDecodingUtils.spec.d.ts +0 -1
  127. package/dist/decoding/integerDecodingUtils.spec.js +0 -300
  128. package/dist/decoding/integerDecodingUtils.spec.js.map +0 -1
  129. package/dist/decoding/integerStreamDecoder.spec.d.ts +0 -1
  130. package/dist/decoding/integerStreamDecoder.spec.js +0 -402
  131. package/dist/decoding/integerStreamDecoder.spec.js.map +0 -1
  132. package/dist/decoding/propertyDecoder.spec.d.ts +0 -1
  133. package/dist/decoding/propertyDecoder.spec.js +0 -448
  134. package/dist/decoding/propertyDecoder.spec.js.map +0 -1
  135. package/dist/decoding/stringDecoder.spec.d.ts +0 -1
  136. package/dist/decoding/stringDecoder.spec.js +0 -387
  137. package/dist/decoding/stringDecoder.spec.js.map +0 -1
  138. package/dist/decoding/unpackNullableUtils.spec.d.ts +0 -1
  139. package/dist/decoding/unpackNullableUtils.spec.js +0 -71
  140. package/dist/decoding/unpackNullableUtils.spec.js.map +0 -1
  141. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.d.ts +0 -1
  142. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js +0 -142
  143. package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js.map +0 -1
  144. package/dist/mltDecoder.spec.d.ts +0 -1
  145. package/dist/mltDecoder.spec.js +0 -152
  146. package/dist/mltDecoder.spec.js.map +0 -1
  147. package/dist/vector/filter/flatSelectionVector.spec.d.ts +0 -1
  148. package/dist/vector/filter/flatSelectionVector.spec.js +0 -51
  149. package/dist/vector/filter/flatSelectionVector.spec.js.map +0 -1
  150. package/dist/vector/filter/selectionVectorUtil.spec.d.ts +0 -1
  151. package/dist/vector/filter/selectionVectorUtil.spec.js +0 -154
  152. package/dist/vector/filter/selectionVectorUtil.spec.js.map +0 -1
  153. package/dist/vector/filter/sequenceSelectionVector.spec.d.ts +0 -1
  154. package/dist/vector/filter/sequenceSelectionVector.spec.js +0 -115
  155. package/dist/vector/filter/sequenceSelectionVector.spec.js.map +0 -1
  156. package/dist/vector/flat/floatFlatVector.spec.d.ts +0 -1
  157. package/dist/vector/flat/floatFlatVector.spec.js +0 -14
  158. package/dist/vector/flat/floatFlatVector.spec.js.map +0 -1
  159. package/dist/vector/flat/intFlatVector.spec.d.ts +0 -1
  160. package/dist/vector/flat/intFlatVector.spec.js +0 -15
  161. package/dist/vector/flat/intFlatVector.spec.js.map +0 -1
  162. package/dist/vector/flat/longFlatVector.spec.d.ts +0 -1
  163. package/dist/vector/flat/longFlatVector.spec.js +0 -14
  164. package/dist/vector/flat/longFlatVector.spec.js.map +0 -1
  165. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.d.ts +0 -1
  166. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js +0 -28
  167. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js.map +0 -1
  168. package/dist/vector/geometry/zOrderCurve.spec.d.ts +0 -1
  169. package/dist/vector/geometry/zOrderCurve.spec.js +0 -25
  170. package/dist/vector/geometry/zOrderCurve.spec.js.map +0 -1
  171. package/dist/vector/sequence/longSequenceVektor.spec.d.ts +0 -1
  172. package/dist/vector/sequence/longSequenceVektor.spec.js +0 -11
  173. package/dist/vector/sequence/longSequenceVektor.spec.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  export declare function encodeFloatsLE(values: Float32Array): Uint8Array;
2
- export declare function encodeDoubleLE(values: Float32Array): Uint8Array;
2
+ export declare function encodeDoubleLE(values: Float64Array): Uint8Array;
3
3
  export declare function encodeBooleanRle(values: boolean[]): Uint8Array;
4
4
  export declare function encodeByteRle(values: Uint8Array): Uint8Array;
5
5
  export declare function encodeStrings(strings: string[]): Uint8Array;
@@ -7,10 +7,10 @@ export function encodeFloatsLE(values) {
7
7
  return buffer;
8
8
  }
9
9
  export function encodeDoubleLE(values) {
10
- const buffer = new Uint8Array(values.length * 8);
10
+ const buffer = new Uint8Array(values.length * Float64Array.BYTES_PER_ELEMENT);
11
11
  const view = new DataView(buffer.buffer);
12
12
  for (let i = 0; i < values.length; i++) {
13
- view.setFloat64(i * 8, values[i], true);
13
+ view.setFloat64(i * Float64Array.BYTES_PER_ELEMENT, values[i], true);
14
14
  }
15
15
  return buffer;
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"encodingUtils.js","sourceRoot":"","sources":["../../src/encoding/encodingUtils.ts"],"names":[],"mappings":"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","sourcesContent":["export function encodeFloatsLE(values: Float32Array): Uint8Array {\n const buffer = new Uint8Array(values.length * 4);\n const view = new DataView(buffer.buffer);\n\n for (let i = 0; i < values.length; i++) {\n view.setFloat32(i * 4, values[i], true);\n }\n\n return buffer;\n}\n\nexport function encodeDoubleLE(values: Float32Array): Uint8Array {\n const buffer = new Uint8Array(values.length * 8);\n const view = new DataView(buffer.buffer);\n\n for (let i = 0; i < values.length; i++) {\n view.setFloat64(i * 8, values[i], true);\n }\n\n return buffer;\n}\n\nexport function encodeBooleanRle(values: boolean[]): Uint8Array {\n // Pack booleans into bytes (8 booleans per byte)\n const numBytes = Math.ceil(values.length / 8);\n const packed = new Uint8Array(numBytes);\n\n for (let i = 0; i < values.length; i++) {\n if (values[i]) {\n const byteIndex = Math.floor(i / 8);\n const bitIndex = i % 8;\n packed[byteIndex] |= 1 << bitIndex;\n }\n }\n\n const result = new Uint8Array(1 + numBytes);\n result[0] = 256 - numBytes;\n result.set(packed, 1);\n\n return result;\n}\n\nexport function encodeByteRle(values: Uint8Array): Uint8Array {\n const result: number[] = [];\n let i = 0;\n\n while (i < values.length) {\n const currentByte = values[i];\n let runLength = 1;\n\n while (i + runLength < values.length && values[i + runLength] === currentByte && runLength < 131) {\n runLength++;\n }\n\n if (runLength >= 3) {\n const header = runLength - 3;\n result.push(Math.min(header, 0x7f));\n result.push(currentByte);\n i += runLength;\n } else {\n const literalStart = i;\n while (i < values.length) {\n let nextRunLength = 1;\n if (i + 1 < values.length) {\n while (\n i + nextRunLength < values.length &&\n values[i + nextRunLength] === values[i] &&\n nextRunLength < 3\n ) {\n nextRunLength++;\n }\n }\n\n if (nextRunLength >= 3) {\n break;\n }\n i++;\n\n if (i - literalStart >= 128) {\n break;\n }\n }\n\n const numLiterals = i - literalStart;\n const header = 256 - numLiterals;\n result.push(header);\n for (let j = literalStart; j < i; j++) {\n result.push(values[j]);\n }\n }\n }\n\n return new Uint8Array(result);\n}\n\nexport function encodeStrings(strings: string[]): Uint8Array {\n const encoder = new TextEncoder();\n const encoded = strings.map((s) => encoder.encode(s));\n const totalLength = encoded.reduce((sum, arr) => sum + arr.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const arr of encoded) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\n\nexport function createStringLengths(strings: string[]): Int32Array {\n const lengths = new Int32Array(strings.length);\n const encoder = new TextEncoder();\n for (let i = 0; i < strings.length; i++) {\n lengths[i] = encoder.encode(strings[i]).length;\n }\n return lengths;\n}\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":"encodingUtils.js","sourceRoot":"","sources":["../../src/encoding/encodingUtils.ts"],"names":[],"mappings":"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","sourcesContent":["export function encodeFloatsLE(values: Float32Array): Uint8Array {\n const buffer = new Uint8Array(values.length * 4);\n const view = new DataView(buffer.buffer);\n\n for (let i = 0; i < values.length; i++) {\n view.setFloat32(i * 4, values[i], true);\n }\n\n return buffer;\n}\n\nexport function encodeDoubleLE(values: Float64Array): Uint8Array {\n const buffer = new Uint8Array(values.length * Float64Array.BYTES_PER_ELEMENT);\n const view = new DataView(buffer.buffer);\n\n for (let i = 0; i < values.length; i++) {\n view.setFloat64(i * Float64Array.BYTES_PER_ELEMENT, values[i], true);\n }\n\n return buffer;\n}\n\nexport function encodeBooleanRle(values: boolean[]): Uint8Array {\n // Pack booleans into bytes (8 booleans per byte)\n const numBytes = Math.ceil(values.length / 8);\n const packed = new Uint8Array(numBytes);\n\n for (let i = 0; i < values.length; i++) {\n if (values[i]) {\n const byteIndex = Math.floor(i / 8);\n const bitIndex = i % 8;\n packed[byteIndex] |= 1 << bitIndex;\n }\n }\n\n const result = new Uint8Array(1 + numBytes);\n result[0] = 256 - numBytes;\n result.set(packed, 1);\n\n return result;\n}\n\nexport function encodeByteRle(values: Uint8Array): Uint8Array {\n const result: number[] = [];\n let i = 0;\n\n while (i < values.length) {\n const currentByte = values[i];\n let runLength = 1;\n\n while (i + runLength < values.length && values[i + runLength] === currentByte && runLength < 131) {\n runLength++;\n }\n\n if (runLength >= 3) {\n const header = runLength - 3;\n result.push(Math.min(header, 0x7f));\n result.push(currentByte);\n i += runLength;\n } else {\n const literalStart = i;\n while (i < values.length) {\n let nextRunLength = 1;\n if (i + 1 < values.length) {\n while (\n i + nextRunLength < values.length &&\n values[i + nextRunLength] === values[i] &&\n nextRunLength < 3\n ) {\n nextRunLength++;\n }\n }\n\n if (nextRunLength >= 3) {\n break;\n }\n i++;\n\n if (i - literalStart >= 128) {\n break;\n }\n }\n\n const numLiterals = i - literalStart;\n const header = 256 - numLiterals;\n result.push(header);\n for (let j = literalStart; j < i; j++) {\n result.push(values[j]);\n }\n }\n }\n\n return new Uint8Array(result);\n}\n\nexport function encodeStrings(strings: string[]): Uint8Array {\n const encoder = new TextEncoder();\n const encoded = strings.map((s) => encoder.encode(s));\n const totalLength = encoded.reduce((sum, arr) => sum + arr.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const arr of encoded) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\n\nexport function createStringLengths(strings: string[]): Int32Array {\n const lengths = new Int32Array(strings.length);\n const encoder = new TextEncoder();\n for (let i = 0; i < strings.length; i++) {\n lengths[i] = encoder.encode(strings[i]).length;\n }\n return lengths;\n}\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"]}
@@ -0,0 +1,19 @@
1
+ import type { Int32Buf, Uint8Buf } from "../decoding/fastPforShared";
2
+ /**
3
+ * Internal workspace for the FastPFOR encoder.
4
+ * Exposed so callers can avoid allocations.
5
+ * Use one workspace per concurrent encode call.
6
+ */
7
+ export type FastPforEncoderWorkspace = {
8
+ dataToBePacked: Array<Int32Array | undefined>;
9
+ dataPointers: Int32Array;
10
+ byteContainer: Uint8Buf;
11
+ bitWidthFrequencies: Int32Array;
12
+ bestBitWidthPlan: Int32Array;
13
+ };
14
+ export declare function fastPack32(inValues: Int32Array, inPos: number, out: Int32Buf, outPos: number, bitWidth: number): void;
15
+ export declare function createFastPforEncoderWorkspace(): FastPforEncoderWorkspace;
16
+ /**
17
+ * Encodes an int32 stream using the FastPFOR wire format (pages + VByte tail).
18
+ */
19
+ export declare function encodeFastPforInt32WithWorkspace(values: Int32Array, workspace: FastPforEncoderWorkspace): Int32Buf;
@@ -0,0 +1,310 @@
1
+ import { MASKS, DEFAULT_PAGE_SIZE, BLOCK_SIZE, greatestMultiple, roundUpToMultipleOf32, normalizePageSize, } from "../decoding/fastPforShared";
2
+ const EXCEPTION_OVERHEAD_BITS = 8;
3
+ const MAX_BIT_WIDTH = 32;
4
+ const BIT_WIDTH_SLOTS = MAX_BIT_WIDTH + 1;
5
+ const PAGE_SIZE = normalizePageSize(DEFAULT_PAGE_SIZE);
6
+ const INITIAL_PACKED_BUFFER_SIZE_WORDS = (PAGE_SIZE / 32) * 4;
7
+ const BYTE_CONTAINER_SIZE = ((3 * PAGE_SIZE) / BLOCK_SIZE + PAGE_SIZE) | 0;
8
+ function requiredBits(value) {
9
+ return 32 - Math.clz32(value >>> 0);
10
+ }
11
+ function ensureInt32Capacity(buffer, requiredLength) {
12
+ if (requiredLength <= buffer.length)
13
+ return buffer;
14
+ let newLength = buffer.length === 0 ? 1 : buffer.length;
15
+ while (newLength < requiredLength) {
16
+ newLength *= 2;
17
+ }
18
+ const next = new Int32Array(newLength);
19
+ next.set(buffer);
20
+ return next;
21
+ }
22
+ function ensureUint8Capacity(buffer, requiredLength) {
23
+ if (requiredLength <= buffer.length)
24
+ return buffer;
25
+ let newLength = buffer.length === 0 ? 1 : buffer.length;
26
+ while (newLength < requiredLength) {
27
+ newLength *= 2;
28
+ }
29
+ const next = new Uint8Array(newLength);
30
+ next.set(buffer);
31
+ return next;
32
+ }
33
+ export function fastPack32(inValues, inPos, out, outPos, bitWidth) {
34
+ if (bitWidth === 0)
35
+ return;
36
+ if (bitWidth === 32) {
37
+ out.set(inValues.subarray(inPos, inPos + 32), outPos);
38
+ return;
39
+ }
40
+ const mask = MASKS[bitWidth] >>> 0;
41
+ let outputWordIndex = outPos;
42
+ let bitOffset = 0;
43
+ let currentWord = 0;
44
+ for (let i = 0; i < 32; i++) {
45
+ const value = (inValues[inPos + i] >>> 0) & mask;
46
+ if (bitOffset + bitWidth <= 32) {
47
+ currentWord |= value << bitOffset;
48
+ bitOffset += bitWidth;
49
+ if (bitOffset === 32) {
50
+ out[outputWordIndex++] = currentWord | 0;
51
+ bitOffset = 0;
52
+ currentWord = 0;
53
+ }
54
+ }
55
+ else {
56
+ const lowBits = 32 - bitOffset;
57
+ const lowMask = MASKS[lowBits] >>> 0;
58
+ currentWord |= (value & lowMask) << bitOffset;
59
+ out[outputWordIndex++] = currentWord | 0;
60
+ currentWord = value >>> lowBits;
61
+ bitOffset = bitWidth - lowBits;
62
+ }
63
+ }
64
+ }
65
+ export function createFastPforEncoderWorkspace() {
66
+ const dataToBePacked = new Array(BIT_WIDTH_SLOTS);
67
+ for (let k = 1; k < BIT_WIDTH_SLOTS; k++) {
68
+ dataToBePacked[k] = new Int32Array(INITIAL_PACKED_BUFFER_SIZE_WORDS);
69
+ }
70
+ return {
71
+ dataToBePacked,
72
+ dataPointers: new Int32Array(BIT_WIDTH_SLOTS),
73
+ byteContainer: new Uint8Array(BYTE_CONTAINER_SIZE),
74
+ bitWidthFrequencies: new Int32Array(BIT_WIDTH_SLOTS),
75
+ bestBitWidthPlan: new Int32Array(3),
76
+ };
77
+ }
78
+ function computeBestBitWidthPlan(inValues, pos, workspace) {
79
+ const bitWidthFrequencies = workspace.bitWidthFrequencies;
80
+ const bestBitWidthPlan = workspace.bestBitWidthPlan;
81
+ bitWidthFrequencies.fill(0);
82
+ for (let k = pos, kEnd = pos + BLOCK_SIZE; k < kEnd; k++) {
83
+ bitWidthFrequencies[requiredBits(inValues[k])]++;
84
+ }
85
+ let maxBitWidth = MAX_BIT_WIDTH;
86
+ while (bitWidthFrequencies[maxBitWidth] === 0)
87
+ maxBitWidth--;
88
+ let bestBitWidth = maxBitWidth;
89
+ let bestCost = maxBitWidth * BLOCK_SIZE;
90
+ let exceptionCount = 0;
91
+ let bestExceptionCount = exceptionCount;
92
+ for (let candidateBitWidth = maxBitWidth - 1; candidateBitWidth >= 0; candidateBitWidth--) {
93
+ exceptionCount += bitWidthFrequencies[candidateBitWidth + 1];
94
+ if (exceptionCount === BLOCK_SIZE)
95
+ break;
96
+ let candidateCost = exceptionCount * EXCEPTION_OVERHEAD_BITS +
97
+ exceptionCount * (maxBitWidth - candidateBitWidth) +
98
+ candidateBitWidth * BLOCK_SIZE +
99
+ 8;
100
+ if (maxBitWidth - candidateBitWidth === 1)
101
+ candidateCost -= exceptionCount;
102
+ if (candidateCost < bestCost) {
103
+ bestCost = candidateCost;
104
+ bestBitWidth = candidateBitWidth;
105
+ bestExceptionCount = exceptionCount;
106
+ }
107
+ }
108
+ bestBitWidthPlan[0] = bestBitWidth;
109
+ bestBitWidthPlan[1] = bestExceptionCount;
110
+ bestBitWidthPlan[2] = maxBitWidth;
111
+ }
112
+ function writeByte(workspace, byteContainerPos, byteValue) {
113
+ if (byteContainerPos >= workspace.byteContainer.length) {
114
+ workspace.byteContainer = ensureUint8Capacity(workspace.byteContainer, byteContainerPos + 1);
115
+ }
116
+ workspace.byteContainer[byteContainerPos] = byteValue & 0xff;
117
+ return byteContainerPos + 1;
118
+ }
119
+ function ensureExceptionValuesCapacity(dataToBePacked, dataPointers, exceptionBitWidth, exceptionCount) {
120
+ if (exceptionBitWidth === 1)
121
+ return;
122
+ const needed = dataPointers[exceptionBitWidth] + exceptionCount;
123
+ const currentExceptionValues = dataToBePacked[exceptionBitWidth];
124
+ if (!currentExceptionValues || needed >= currentExceptionValues.length) {
125
+ let newSize = 2 * needed;
126
+ newSize = roundUpToMultipleOf32(newSize);
127
+ const next = new Int32Array(newSize);
128
+ if (currentExceptionValues)
129
+ next.set(currentExceptionValues);
130
+ dataToBePacked[exceptionBitWidth] = next;
131
+ }
132
+ }
133
+ function writeBlockHeader(workspace, byteContainerPos, bitWidth, exceptionCount, maxBitWidth) {
134
+ byteContainerPos = writeByte(workspace, byteContainerPos, bitWidth);
135
+ byteContainerPos = writeByte(workspace, byteContainerPos, exceptionCount);
136
+ if (exceptionCount > 0) {
137
+ byteContainerPos = writeByte(workspace, byteContainerPos, maxBitWidth);
138
+ }
139
+ return byteContainerPos;
140
+ }
141
+ function recordBlockExceptions(workspace, inValues, blockPos, bitWidth, exceptionCount, exceptionBitWidth, byteContainerPos) {
142
+ if (exceptionCount === 0)
143
+ return byteContainerPos;
144
+ const dataToBePacked = workspace.dataToBePacked;
145
+ const dataPointers = workspace.dataPointers;
146
+ ensureExceptionValuesCapacity(dataToBePacked, dataPointers, exceptionBitWidth, exceptionCount);
147
+ for (let k = 0; k < BLOCK_SIZE; k++) {
148
+ const value = inValues[blockPos + k] >>> 0;
149
+ if (value >>> bitWidth !== 0) {
150
+ byteContainerPos = writeByte(workspace, byteContainerPos, k);
151
+ if (exceptionBitWidth !== 1) {
152
+ const exceptionValues = dataToBePacked[exceptionBitWidth];
153
+ exceptionValues[dataPointers[exceptionBitWidth]++] = (value >>> bitWidth) | 0;
154
+ }
155
+ }
156
+ }
157
+ return byteContainerPos;
158
+ }
159
+ function packBlock(inValues, blockPos, bitWidth, state) {
160
+ for (let k = 0; k < BLOCK_SIZE; k += 32) {
161
+ state.out = ensureInt32Capacity(state.out, state.outPos + bitWidth);
162
+ fastPack32(inValues, blockPos + k, state.out, state.outPos, bitWidth);
163
+ state.outPos += bitWidth;
164
+ }
165
+ }
166
+ function padByteContainerToInt32(workspace, byteContainerPos) {
167
+ while ((byteContainerPos & 3) !== 0) {
168
+ byteContainerPos = writeByte(workspace, byteContainerPos, 0);
169
+ }
170
+ return byteContainerPos;
171
+ }
172
+ function writeByteContainerInts(workspace, state, byteContainerPos) {
173
+ const howManyInts = byteContainerPos / 4;
174
+ state.out = ensureInt32Capacity(state.out, state.outPos + howManyInts);
175
+ const byteContainer = workspace.byteContainer;
176
+ for (let i = 0; i < howManyInts; i++) {
177
+ const base = i * 4;
178
+ const packedWord = byteContainer[base] |
179
+ (byteContainer[base + 1] << 8) |
180
+ (byteContainer[base + 2] << 16) |
181
+ (byteContainer[base + 3] << 24) |
182
+ 0;
183
+ state.out[state.outPos + i] = packedWord;
184
+ }
185
+ state.outPos += howManyInts;
186
+ }
187
+ function computeExceptionBitmap(dataPointers) {
188
+ let bitmap = 0;
189
+ for (let k = 2; k <= MAX_BIT_WIDTH; k++) {
190
+ if (dataPointers[k] !== 0) {
191
+ bitmap |= k === MAX_BIT_WIDTH ? 0x80000000 : 1 << (k - 1);
192
+ }
193
+ }
194
+ return bitmap;
195
+ }
196
+ function writeExceptionStreams(workspace, state) {
197
+ const dataPointers = workspace.dataPointers;
198
+ const dataToBePacked = workspace.dataToBePacked;
199
+ const bitmap = computeExceptionBitmap(dataPointers);
200
+ state.out = ensureInt32Capacity(state.out, state.outPos + 1);
201
+ state.out[state.outPos++] = bitmap;
202
+ for (let k = 2; k <= MAX_BIT_WIDTH; k++) {
203
+ const size = dataPointers[k];
204
+ if (size !== 0) {
205
+ state.out = ensureInt32Capacity(state.out, state.outPos + 1);
206
+ state.out[state.outPos++] = size | 0;
207
+ let j = 0;
208
+ for (; j < size; j += 32) {
209
+ const exceptionValues = dataToBePacked[k];
210
+ state.out = ensureInt32Capacity(state.out, state.outPos + k);
211
+ fastPack32(exceptionValues, j, state.out, state.outPos, k);
212
+ state.outPos += k;
213
+ }
214
+ const overflow = j - size;
215
+ state.outPos -= (overflow * k) >>> 5;
216
+ }
217
+ }
218
+ }
219
+ function encodePage(inValues, thisSize, state, workspace) {
220
+ const headerPos = state.outPos;
221
+ state.out = ensureInt32Capacity(state.out, headerPos + 1);
222
+ state.outPos = (state.outPos + 1) | 0;
223
+ const dataPointers = workspace.dataPointers;
224
+ dataPointers.fill(0);
225
+ let byteContainerPos = 0;
226
+ let tmpInPos = state.inPos;
227
+ const finalInPos = tmpInPos + thisSize - BLOCK_SIZE;
228
+ for (; tmpInPos <= finalInPos; tmpInPos += BLOCK_SIZE) {
229
+ computeBestBitWidthPlan(inValues, tmpInPos, workspace);
230
+ const bestBitWidthPlan = workspace.bestBitWidthPlan;
231
+ const bitWidth = bestBitWidthPlan[0];
232
+ const exceptionCount = bestBitWidthPlan[1];
233
+ const maxBitWidth = bestBitWidthPlan[2];
234
+ const exceptionBitWidth = exceptionCount > 0 ? maxBitWidth - bitWidth : 0;
235
+ byteContainerPos = writeBlockHeader(workspace, byteContainerPos, bitWidth, exceptionCount, maxBitWidth);
236
+ byteContainerPos = recordBlockExceptions(workspace, inValues, tmpInPos, bitWidth, exceptionCount, exceptionBitWidth, byteContainerPos);
237
+ packBlock(inValues, tmpInPos, bitWidth, state);
238
+ }
239
+ const pageEndOutPos = state.outPos;
240
+ state.inPos = tmpInPos;
241
+ state.out[headerPos] = (pageEndOutPos - headerPos) | 0;
242
+ const byteSize = byteContainerPos;
243
+ byteContainerPos = padByteContainerToInt32(workspace, byteContainerPos);
244
+ state.out = ensureInt32Capacity(state.out, state.outPos + 1);
245
+ state.out[state.outPos++] = byteSize | 0;
246
+ writeByteContainerInts(workspace, state, byteContainerPos);
247
+ writeExceptionStreams(workspace, state);
248
+ }
249
+ function encodeAlignedPages(inValues, inLength, state, workspace) {
250
+ const alignedLength = greatestMultiple(inLength, BLOCK_SIZE);
251
+ const finalInPos = state.inPos + alignedLength;
252
+ while (state.inPos !== finalInPos) {
253
+ const thisSize = Math.min(PAGE_SIZE, finalInPos - state.inPos);
254
+ encodePage(inValues, thisSize, state, workspace);
255
+ }
256
+ }
257
+ function encode(inValues, inLength, state, workspace) {
258
+ const alignedLength = greatestMultiple(inLength, BLOCK_SIZE);
259
+ state.out = ensureInt32Capacity(state.out, state.outPos + 1);
260
+ state.out[state.outPos++] = alignedLength;
261
+ if (alignedLength === 0)
262
+ return;
263
+ encodeAlignedPages(inValues, alignedLength, state, workspace);
264
+ }
265
+ /**
266
+ * VByte encoding for FastPFOR tail values (MSB=1 terminator).
267
+ * Note: Inverts standard Protobuf Varint (MSB=0 terminator), so we cannot reuse generic methods.
268
+ */
269
+ function encodeVByte(inValues, inLength, state, workspace) {
270
+ if (inLength === 0)
271
+ return;
272
+ const requiredBytes = inLength * 5 + 3;
273
+ workspace.byteContainer = ensureUint8Capacity(workspace.byteContainer, requiredBytes);
274
+ const start = state.inPos;
275
+ let bytePos = 0;
276
+ for (let k = start; k < start + inLength; k++) {
277
+ let value = inValues[k] >>> 0;
278
+ while (value >= 0x80) {
279
+ workspace.byteContainer[bytePos++] = value & 0x7f;
280
+ value >>>= 7;
281
+ }
282
+ workspace.byteContainer[bytePos++] = (value | 0x80) & 0xff;
283
+ }
284
+ while ((bytePos & 3) !== 0)
285
+ workspace.byteContainer[bytePos++] = 0;
286
+ const intsToWrite = bytePos / 4;
287
+ state.out = ensureInt32Capacity(state.out, state.outPos + intsToWrite);
288
+ let outIdx = state.outPos;
289
+ for (let i = 0; i < bytePos; i += 4) {
290
+ const packedWord = workspace.byteContainer[i] |
291
+ (workspace.byteContainer[i + 1] << 8) |
292
+ (workspace.byteContainer[i + 2] << 16) |
293
+ (workspace.byteContainer[i + 3] << 24) |
294
+ 0;
295
+ state.out[outIdx++] = packedWord;
296
+ }
297
+ state.outPos = outIdx;
298
+ state.inPos = (state.inPos + inLength) | 0;
299
+ }
300
+ /**
301
+ * Encodes an int32 stream using the FastPFOR wire format (pages + VByte tail).
302
+ */
303
+ export function encodeFastPforInt32WithWorkspace(values, workspace) {
304
+ const state = { inPos: 0, outPos: 0, out: new Int32Array(values.length + 1024) };
305
+ encode(values, values.length, state, workspace);
306
+ const remaining = values.length - state.inPos;
307
+ encodeVByte(values, remaining, state, workspace);
308
+ return state.out.subarray(0, state.outPos);
309
+ }
310
+ //# sourceMappingURL=fastPforEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastPforEncoder.js","sourceRoot":"","sources":["../../src/encoding/fastPforEncoder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Int32Buf, Uint8Buf } from \"../decoding/fastPforShared\";\nimport {\n MASKS,\n DEFAULT_PAGE_SIZE,\n BLOCK_SIZE,\n greatestMultiple,\n roundUpToMultipleOf32,\n normalizePageSize,\n} from \"../decoding/fastPforShared\";\n\nconst EXCEPTION_OVERHEAD_BITS = 8;\nconst MAX_BIT_WIDTH = 32;\nconst BIT_WIDTH_SLOTS = MAX_BIT_WIDTH + 1;\nconst PAGE_SIZE = normalizePageSize(DEFAULT_PAGE_SIZE);\nconst INITIAL_PACKED_BUFFER_SIZE_WORDS = (PAGE_SIZE / 32) * 4;\nconst BYTE_CONTAINER_SIZE = ((3 * PAGE_SIZE) / BLOCK_SIZE + PAGE_SIZE) | 0;\n\nfunction requiredBits(value: number): number {\n return 32 - Math.clz32(value >>> 0);\n}\n\nfunction ensureInt32Capacity(buffer: Int32Buf, requiredLength: number): Int32Buf {\n if (requiredLength <= buffer.length) return buffer;\n\n let newLength = buffer.length === 0 ? 1 : buffer.length;\n while (newLength < requiredLength) {\n newLength *= 2;\n }\n\n const next = new Int32Array(newLength) as Int32Buf;\n next.set(buffer);\n return next;\n}\n\nfunction ensureUint8Capacity(buffer: Uint8Buf, requiredLength: number): Uint8Buf {\n if (requiredLength <= buffer.length) return buffer;\n\n let newLength = buffer.length === 0 ? 1 : buffer.length;\n while (newLength < requiredLength) {\n newLength *= 2;\n }\n\n const next = new Uint8Array(newLength) as Uint8Buf;\n next.set(buffer);\n return next;\n}\n\n/**\n * Internal workspace for the FastPFOR encoder.\n * Exposed so callers can avoid allocations.\n * Use one workspace per concurrent encode call.\n */\nexport type FastPforEncoderWorkspace = {\n dataToBePacked: Array<Int32Array | undefined>;\n dataPointers: Int32Array;\n byteContainer: Uint8Buf;\n bitWidthFrequencies: Int32Array;\n bestBitWidthPlan: Int32Array;\n};\n\nexport function fastPack32(inValues: Int32Array, inPos: number, out: Int32Buf, outPos: number, bitWidth: number): void {\n if (bitWidth === 0) return;\n if (bitWidth === 32) {\n out.set(inValues.subarray(inPos, inPos + 32), outPos);\n return;\n }\n\n const mask = MASKS[bitWidth] >>> 0;\n let outputWordIndex = outPos;\n let bitOffset = 0;\n let currentWord = 0;\n\n for (let i = 0; i < 32; i++) {\n const value = (inValues[inPos + i] >>> 0) & mask;\n\n if (bitOffset + bitWidth <= 32) {\n currentWord |= value << bitOffset;\n bitOffset += bitWidth;\n\n if (bitOffset === 32) {\n out[outputWordIndex++] = currentWord | 0;\n bitOffset = 0;\n currentWord = 0;\n }\n } else {\n const lowBits = 32 - bitOffset;\n const lowMask = MASKS[lowBits] >>> 0;\n currentWord |= (value & lowMask) << bitOffset;\n out[outputWordIndex++] = currentWord | 0;\n currentWord = value >>> lowBits;\n bitOffset = bitWidth - lowBits;\n }\n }\n}\n\nexport function createFastPforEncoderWorkspace(): FastPforEncoderWorkspace {\n const dataToBePacked: Array<Int32Array | undefined> = new Array(BIT_WIDTH_SLOTS);\n for (let k = 1; k < BIT_WIDTH_SLOTS; k++) {\n dataToBePacked[k] = new Int32Array(INITIAL_PACKED_BUFFER_SIZE_WORDS);\n }\n\n return {\n dataToBePacked,\n dataPointers: new Int32Array(BIT_WIDTH_SLOTS),\n byteContainer: new Uint8Array(BYTE_CONTAINER_SIZE) as Uint8Buf,\n bitWidthFrequencies: new Int32Array(BIT_WIDTH_SLOTS),\n bestBitWidthPlan: new Int32Array(3),\n };\n}\n\nfunction computeBestBitWidthPlan(inValues: Int32Array, pos: number, workspace: FastPforEncoderWorkspace): void {\n const bitWidthFrequencies = workspace.bitWidthFrequencies;\n const bestBitWidthPlan = workspace.bestBitWidthPlan;\n bitWidthFrequencies.fill(0);\n for (let k = pos, kEnd = pos + BLOCK_SIZE; k < kEnd; k++) {\n bitWidthFrequencies[requiredBits(inValues[k])]++;\n }\n\n let maxBitWidth = MAX_BIT_WIDTH;\n while (bitWidthFrequencies[maxBitWidth] === 0) maxBitWidth--;\n\n let bestBitWidth = maxBitWidth;\n let bestCost = maxBitWidth * BLOCK_SIZE;\n let exceptionCount = 0;\n let bestExceptionCount = exceptionCount;\n\n for (let candidateBitWidth = maxBitWidth - 1; candidateBitWidth >= 0; candidateBitWidth--) {\n exceptionCount += bitWidthFrequencies[candidateBitWidth + 1];\n if (exceptionCount === BLOCK_SIZE) break;\n\n let candidateCost =\n exceptionCount * EXCEPTION_OVERHEAD_BITS +\n exceptionCount * (maxBitWidth - candidateBitWidth) +\n candidateBitWidth * BLOCK_SIZE +\n 8;\n if (maxBitWidth - candidateBitWidth === 1) candidateCost -= exceptionCount;\n\n if (candidateCost < bestCost) {\n bestCost = candidateCost;\n bestBitWidth = candidateBitWidth;\n bestExceptionCount = exceptionCount;\n }\n }\n\n bestBitWidthPlan[0] = bestBitWidth;\n bestBitWidthPlan[1] = bestExceptionCount;\n bestBitWidthPlan[2] = maxBitWidth;\n}\n\nfunction writeByte(workspace: FastPforEncoderWorkspace, byteContainerPos: number, byteValue: number): number {\n if (byteContainerPos >= workspace.byteContainer.length) {\n workspace.byteContainer = ensureUint8Capacity(workspace.byteContainer, byteContainerPos + 1);\n }\n workspace.byteContainer[byteContainerPos] = byteValue & 0xff;\n return byteContainerPos + 1;\n}\n\nfunction ensureExceptionValuesCapacity(\n dataToBePacked: Array<Int32Array | undefined>,\n dataPointers: Int32Array,\n exceptionBitWidth: number,\n exceptionCount: number,\n): void {\n if (exceptionBitWidth === 1) return;\n\n const needed = dataPointers[exceptionBitWidth] + exceptionCount;\n const currentExceptionValues = dataToBePacked[exceptionBitWidth];\n if (!currentExceptionValues || needed >= currentExceptionValues.length) {\n let newSize = 2 * needed;\n newSize = roundUpToMultipleOf32(newSize);\n const next = new Int32Array(newSize);\n if (currentExceptionValues) next.set(currentExceptionValues);\n dataToBePacked[exceptionBitWidth] = next;\n }\n}\n\nfunction writeBlockHeader(\n workspace: FastPforEncoderWorkspace,\n byteContainerPos: number,\n bitWidth: number,\n exceptionCount: number,\n maxBitWidth: number,\n): number {\n byteContainerPos = writeByte(workspace, byteContainerPos, bitWidth);\n byteContainerPos = writeByte(workspace, byteContainerPos, exceptionCount);\n if (exceptionCount > 0) {\n byteContainerPos = writeByte(workspace, byteContainerPos, maxBitWidth);\n }\n return byteContainerPos;\n}\n\nfunction recordBlockExceptions(\n workspace: FastPforEncoderWorkspace,\n inValues: Int32Array,\n blockPos: number,\n bitWidth: number,\n exceptionCount: number,\n exceptionBitWidth: number,\n byteContainerPos: number,\n): number {\n if (exceptionCount === 0) return byteContainerPos;\n\n const dataToBePacked = workspace.dataToBePacked;\n const dataPointers = workspace.dataPointers;\n\n ensureExceptionValuesCapacity(dataToBePacked, dataPointers, exceptionBitWidth, exceptionCount);\n\n for (let k = 0; k < BLOCK_SIZE; k++) {\n const value = inValues[blockPos + k] >>> 0;\n if (value >>> bitWidth !== 0) {\n byteContainerPos = writeByte(workspace, byteContainerPos, k);\n if (exceptionBitWidth !== 1) {\n const exceptionValues = dataToBePacked[exceptionBitWidth];\n exceptionValues[dataPointers[exceptionBitWidth]++] = (value >>> bitWidth) | 0;\n }\n }\n }\n\n return byteContainerPos;\n}\n\ntype EncodeState = { inPos: number; out: Int32Buf; outPos: number };\n\nfunction packBlock(inValues: Int32Array, blockPos: number, bitWidth: number, state: EncodeState): void {\n for (let k = 0; k < BLOCK_SIZE; k += 32) {\n state.out = ensureInt32Capacity(state.out, state.outPos + bitWidth);\n fastPack32(inValues, blockPos + k, state.out, state.outPos, bitWidth);\n state.outPos += bitWidth;\n }\n}\n\nfunction padByteContainerToInt32(workspace: FastPforEncoderWorkspace, byteContainerPos: number): number {\n while ((byteContainerPos & 3) !== 0) {\n byteContainerPos = writeByte(workspace, byteContainerPos, 0);\n }\n return byteContainerPos;\n}\n\nfunction writeByteContainerInts(\n workspace: FastPforEncoderWorkspace,\n state: EncodeState,\n byteContainerPos: number,\n): void {\n const howManyInts = byteContainerPos / 4;\n state.out = ensureInt32Capacity(state.out, state.outPos + howManyInts);\n\n const byteContainer = workspace.byteContainer;\n for (let i = 0; i < howManyInts; i++) {\n const base = i * 4;\n const packedWord =\n byteContainer[base] |\n (byteContainer[base + 1] << 8) |\n (byteContainer[base + 2] << 16) |\n (byteContainer[base + 3] << 24) |\n 0;\n state.out[state.outPos + i] = packedWord;\n }\n\n state.outPos += howManyInts;\n}\n\nfunction computeExceptionBitmap(dataPointers: Int32Array): number {\n let bitmap = 0;\n for (let k = 2; k <= MAX_BIT_WIDTH; k++) {\n if (dataPointers[k] !== 0) {\n bitmap |= k === MAX_BIT_WIDTH ? 0x80000000 : 1 << (k - 1);\n }\n }\n return bitmap;\n}\n\nfunction writeExceptionStreams(workspace: FastPforEncoderWorkspace, state: EncodeState): void {\n const dataPointers = workspace.dataPointers;\n const dataToBePacked = workspace.dataToBePacked;\n\n const bitmap = computeExceptionBitmap(dataPointers);\n state.out = ensureInt32Capacity(state.out, state.outPos + 1);\n state.out[state.outPos++] = bitmap;\n\n for (let k = 2; k <= MAX_BIT_WIDTH; k++) {\n const size = dataPointers[k];\n if (size !== 0) {\n state.out = ensureInt32Capacity(state.out, state.outPos + 1);\n state.out[state.outPos++] = size | 0;\n\n let j = 0;\n for (; j < size; j += 32) {\n const exceptionValues = dataToBePacked[k];\n state.out = ensureInt32Capacity(state.out, state.outPos + k);\n fastPack32(exceptionValues, j, state.out, state.outPos, k);\n state.outPos += k;\n }\n\n const overflow = j - size;\n state.outPos -= (overflow * k) >>> 5;\n }\n }\n}\n\nfunction encodePage(\n inValues: Int32Array,\n thisSize: number,\n state: EncodeState,\n workspace: FastPforEncoderWorkspace,\n): void {\n const headerPos = state.outPos;\n state.out = ensureInt32Capacity(state.out, headerPos + 1);\n state.outPos = (state.outPos + 1) | 0;\n\n const dataPointers = workspace.dataPointers;\n dataPointers.fill(0);\n\n let byteContainerPos = 0;\n\n let tmpInPos = state.inPos;\n const finalInPos = tmpInPos + thisSize - BLOCK_SIZE;\n\n for (; tmpInPos <= finalInPos; tmpInPos += BLOCK_SIZE) {\n computeBestBitWidthPlan(inValues, tmpInPos, workspace);\n\n const bestBitWidthPlan = workspace.bestBitWidthPlan;\n const bitWidth = bestBitWidthPlan[0];\n const exceptionCount = bestBitWidthPlan[1];\n const maxBitWidth = bestBitWidthPlan[2];\n\n const exceptionBitWidth = exceptionCount > 0 ? maxBitWidth - bitWidth : 0;\n byteContainerPos = writeBlockHeader(workspace, byteContainerPos, bitWidth, exceptionCount, maxBitWidth);\n byteContainerPos = recordBlockExceptions(\n workspace,\n inValues,\n tmpInPos,\n bitWidth,\n exceptionCount,\n exceptionBitWidth,\n byteContainerPos,\n );\n\n packBlock(inValues, tmpInPos, bitWidth, state);\n }\n\n const pageEndOutPos = state.outPos;\n state.inPos = tmpInPos;\n state.out[headerPos] = (pageEndOutPos - headerPos) | 0;\n\n const byteSize = byteContainerPos;\n byteContainerPos = padByteContainerToInt32(workspace, byteContainerPos);\n\n state.out = ensureInt32Capacity(state.out, state.outPos + 1);\n state.out[state.outPos++] = byteSize | 0;\n\n writeByteContainerInts(workspace, state, byteContainerPos);\n\n writeExceptionStreams(workspace, state);\n}\n\nfunction encodeAlignedPages(\n inValues: Int32Array,\n inLength: number,\n state: EncodeState,\n workspace: FastPforEncoderWorkspace,\n): void {\n const alignedLength = greatestMultiple(inLength, BLOCK_SIZE);\n const finalInPos = state.inPos + alignedLength;\n\n while (state.inPos !== finalInPos) {\n const thisSize = Math.min(PAGE_SIZE, finalInPos - state.inPos);\n encodePage(inValues, thisSize, state, workspace);\n }\n}\n\nfunction encode(inValues: Int32Array, inLength: number, state: EncodeState, workspace: FastPforEncoderWorkspace): void {\n const alignedLength = greatestMultiple(inLength, BLOCK_SIZE);\n state.out = ensureInt32Capacity(state.out, state.outPos + 1);\n state.out[state.outPos++] = alignedLength;\n\n if (alignedLength === 0) return;\n encodeAlignedPages(inValues, alignedLength, state, workspace);\n}\n\n/**\n * VByte encoding for FastPFOR tail values (MSB=1 terminator).\n * Note: Inverts standard Protobuf Varint (MSB=0 terminator), so we cannot reuse generic methods.\n */\nfunction encodeVByte(\n inValues: Int32Array,\n inLength: number,\n state: EncodeState,\n workspace: FastPforEncoderWorkspace,\n): void {\n if (inLength === 0) return;\n\n const requiredBytes = inLength * 5 + 3;\n workspace.byteContainer = ensureUint8Capacity(workspace.byteContainer, requiredBytes);\n\n const start = state.inPos;\n let bytePos = 0;\n for (let k = start; k < start + inLength; k++) {\n let value = inValues[k] >>> 0;\n while (value >= 0x80) {\n workspace.byteContainer[bytePos++] = value & 0x7f;\n value >>>= 7;\n }\n workspace.byteContainer[bytePos++] = (value | 0x80) & 0xff;\n }\n\n while ((bytePos & 3) !== 0) workspace.byteContainer[bytePos++] = 0;\n\n const intsToWrite = bytePos / 4;\n state.out = ensureInt32Capacity(state.out, state.outPos + intsToWrite);\n\n let outIdx = state.outPos;\n for (let i = 0; i < bytePos; i += 4) {\n const packedWord =\n workspace.byteContainer[i] |\n (workspace.byteContainer[i + 1] << 8) |\n (workspace.byteContainer[i + 2] << 16) |\n (workspace.byteContainer[i + 3] << 24) |\n 0;\n state.out[outIdx++] = packedWord;\n }\n\n state.outPos = outIdx;\n state.inPos = (state.inPos + inLength) | 0;\n}\n\n/**\n * Encodes an int32 stream using the FastPFOR wire format (pages + VByte tail).\n */\nexport function encodeFastPforInt32WithWorkspace(values: Int32Array, workspace: FastPforEncoderWorkspace): Int32Buf {\n const state: EncodeState = { inPos: 0, outPos: 0, out: new Int32Array(values.length + 1024) as Int32Buf };\n\n encode(values, values.length, state, workspace);\n\n const remaining = values.length - state.inPos;\n encodeVByte(values, remaining, state, workspace);\n\n return state.out.subarray(0, state.outPos);\n}\n"]}
@@ -1,21 +1,21 @@
1
1
  import IntWrapper from "../decoding/intWrapper";
2
2
  export declare function encodeVarintInt32Value(value: number, dst: Uint8Array, offset: IntWrapper): void;
3
3
  export declare function encodeVarintInt32(values: Int32Array): Uint8Array;
4
- export declare function encodeVarintInt64(values: BigInt64Array): Uint8Array;
4
+ export declare function encodeVarintInt64(values: BigUint64Array): Uint8Array;
5
5
  export declare function encodeVarintFloat64(values: Float64Array): Uint8Array;
6
- export declare function encodeFastPfor(data: Int32Array): Uint8Array;
6
+ export declare function encodeFastPfor(values: Int32Array): Uint8Array;
7
7
  export declare function encodeZigZagInt32Value(value: number): number;
8
8
  export declare function encodeZigZagInt64Value(value: bigint): bigint;
9
9
  export declare function encodeZigZagFloat64Value(n: number): number;
10
10
  export declare function encodeZigZagInt32(data: Int32Array): void;
11
- export declare function encodeZigZagInt64(data: BigInt64Array): void;
11
+ export declare function encodeZigZagInt64(data: BigInt64Array): BigUint64Array;
12
12
  export declare function encodeZigZagFloat64(data: Float64Array): void;
13
13
  export declare function encodeUnsignedRleInt32(input: Int32Array): {
14
14
  data: Int32Array;
15
15
  runs: number;
16
16
  };
17
17
  export declare function encodeUnsignedRleInt64(input: BigInt64Array): {
18
- data: BigInt64Array;
18
+ data: BigUint64Array;
19
19
  runs: number;
20
20
  };
21
21
  export declare function encodeUnsignedRleFloat64(input: Float64Array): {
@@ -23,7 +23,7 @@ export declare function encodeUnsignedRleFloat64(input: Float64Array): {
23
23
  runs: number;
24
24
  };
25
25
  export declare function encodeZigZagDeltaInt32(data: Int32Array): void;
26
- export declare function encodeZigZagDeltaInt64(data: BigInt64Array): void;
26
+ export declare function encodeZigZagDeltaInt64(data: BigInt64Array): BigUint64Array;
27
27
  export declare function encodeZigZagDeltaFloat64(data: Float64Array): void;
28
28
  export declare function encodeZigZagRleInt32(input: Int32Array): {
29
29
  data: Int32Array;
@@ -31,7 +31,7 @@ export declare function encodeZigZagRleInt32(input: Int32Array): {
31
31
  numTotalValues: number;
32
32
  };
33
33
  export declare function encodeZigZagRleInt64(input: BigInt64Array): {
34
- data: BigInt64Array;
34
+ data: BigUint64Array;
35
35
  runs: number;
36
36
  numTotalValues: number;
37
37
  };
@@ -62,7 +62,7 @@ export declare function encodeDeltaRleInt32(input: Int32Array): {
62
62
  numValues: number;
63
63
  };
64
64
  export declare function encodeDeltaRleInt64(input: BigInt64Array): {
65
- data: BigInt64Array;
65
+ data: BigUint64Array;
66
66
  runs: number;
67
67
  numValues: number;
68
68
  };
@@ -1,4 +1,6 @@
1
1
  import IntWrapper from "../decoding/intWrapper";
2
+ import { createFastPforEncoderWorkspace, encodeFastPforInt32WithWorkspace } from "./fastPforEncoder";
3
+ import { encodeBigEndianInt32s } from "./bigEndianEncode";
2
4
  export function encodeVarintInt32Value(value, dst, offset) {
3
5
  let v = value;
4
6
  while (v > 0x7f) {
@@ -84,8 +86,10 @@ function encodeVarintFloat64Value(val, buf, offset) {
84
86
  buf[offset.get()] = val;
85
87
  offset.increment();
86
88
  }
87
- export function encodeFastPfor(data) {
88
- throw new Error("FastPFor is not implemented yet.");
89
+ export function encodeFastPfor(values) {
90
+ const encoderWorkspace = createFastPforEncoderWorkspace();
91
+ const encodedWords = encodeFastPforInt32WithWorkspace(values, encoderWorkspace);
92
+ return encodeBigEndianInt32s(encodedWords);
89
93
  }
90
94
  export function encodeZigZagInt32Value(value) {
91
95
  return (value << 1) ^ (value >> 31);
@@ -102,9 +106,11 @@ export function encodeZigZagInt32(data) {
102
106
  }
103
107
  }
104
108
  export function encodeZigZagInt64(data) {
109
+ const result = new BigUint64Array(data.length);
105
110
  for (let i = 0; i < data.length; i++) {
106
- data[i] = encodeZigZagInt64Value(data[i]);
111
+ result[i] = encodeZigZagInt64Value(data[i]);
107
112
  }
113
+ return result;
108
114
  }
109
115
  export function encodeZigZagFloat64(data) {
110
116
  for (let i = 0; i < data.length; i++) {
@@ -147,7 +153,7 @@ export function encodeUnsignedRleInt32(input) {
147
153
  }
148
154
  export function encodeUnsignedRleInt64(input) {
149
155
  if (input.length === 0) {
150
- return { data: new BigInt64Array(0), runs: 0 };
156
+ return { data: new BigUint64Array(0), runs: 0 };
151
157
  }
152
158
  const runLengths = [];
153
159
  const runValues = [];
@@ -170,10 +176,10 @@ export function encodeUnsignedRleInt64(input) {
170
176
  // Record the final run after the loop finishes
171
177
  runLengths.push(currentRunLength);
172
178
  runValues.push(currentValue);
173
- // Combine lengths and values into the final structured output array (BigInt64Array)
179
+ // Combine lengths and values into the final structured output array (BigUint64Array)
174
180
  const numRuns = runLengths.length;
175
- const encodedData = new BigInt64Array(numRuns * 2);
176
- // Populate the first half with lengths. We must convert the numbers back to BigInts here.
181
+ const encodedData = new BigUint64Array(numRuns * 2);
182
+ // Populate the first half with lengths, converting the run length numbers to bigint for storage in the BigUint64Array.
177
183
  for (let i = 0; i < numRuns; i++) {
178
184
  encodedData[i] = BigInt(runLengths[i]);
179
185
  }
@@ -234,19 +240,21 @@ export function encodeZigZagDeltaInt32(data) {
234
240
  }
235
241
  export function encodeZigZagDeltaInt64(data) {
236
242
  if (data.length === 0) {
237
- return;
243
+ return new BigUint64Array(0);
238
244
  }
245
+ const encodedData = new BigUint64Array(data.length);
239
246
  let previousValue = data[0];
240
- data[0] = encodeZigZagInt64Value(previousValue);
247
+ encodedData[0] = encodeZigZagInt64Value(previousValue);
241
248
  for (let i = 1; i < data.length; i++) {
242
249
  const currentValue = data[i];
243
250
  const delta = currentValue - previousValue;
244
251
  const encodedDelta = encodeZigZagInt64Value(delta);
245
252
  // Store the encoded delta back into the array
246
- data[i] = encodedDelta;
253
+ encodedData[i] = encodedDelta;
247
254
  // Update the previous value tracker for the next iteration's delta calculation
248
255
  previousValue = currentValue;
249
256
  }
257
+ return encodedData;
250
258
  }
251
259
  export function encodeZigZagDeltaFloat64(data) {
252
260
  if (data.length === 0) {
@@ -310,7 +318,7 @@ export function encodeZigZagRleInt32(input) {
310
318
  }
311
319
  export function encodeZigZagRleInt64(input) {
312
320
  if (input.length === 0) {
313
- return { data: new BigInt64Array(0), runs: 0, numTotalValues: 0 };
321
+ return { data: new BigUint64Array(0), runs: 0, numTotalValues: 0 };
314
322
  }
315
323
  const zigzagEncodedStream = [];
316
324
  // Step 1: Apply Zigzag Encoding to all values
@@ -340,9 +348,9 @@ export function encodeZigZagRleInt64(input) {
340
348
  runZigZagValues.push(currentValue);
341
349
  // Step 3: Combine lengths and values into the final structured output array
342
350
  const numRuns = runLengths.length;
343
- // The final array uses BigInt64Array for lengths AND values
344
- const encodedData = new BigInt64Array(numRuns * 2);
345
- // Populate the first half with lengths (converting numbers back to BigInts)
351
+ // The final array uses BigUint64Array for lengths AND values
352
+ const encodedData = new BigUint64Array(numRuns * 2);
353
+ // Populate the first half with lengths (converting numbers back to BigUint64Array format)
346
354
  for (let i = 0; i < numRuns; i++) {
347
355
  encodedData[i] = BigInt(runLengths[i]);
348
356
  }
@@ -604,7 +612,7 @@ export function encodeDeltaRleInt32(input) {
604
612
  }
605
613
  export function encodeDeltaRleInt64(input) {
606
614
  if (input.length === 0) {
607
- return { data: new BigInt64Array(0), runs: 0, numValues: 0 };
615
+ return { data: new BigUint64Array(0), runs: 0, numValues: 0 };
608
616
  }
609
617
  const deltasAndEncoded = [];
610
618
  let previousValue = 0n;
@@ -639,8 +647,8 @@ export function encodeDeltaRleInt64(input) {
639
647
  runZigZagDeltas.push(currentValue);
640
648
  // Step 4: Combine lengths and values into the final structured output array
641
649
  const numRuns = runLengths.length;
642
- const encodedData = new BigInt64Array(numRuns * 2);
643
- // Populate the first half with lengths (converting numbers back to BigInts for storage)
650
+ const encodedData = new BigUint64Array(numRuns * 2);
651
+ // Populate the first half with lengths (converting numbers back to BigUint64Array for storage)
644
652
  for (let i = 0; i < numRuns; i++) {
645
653
  encodedData[i] = BigInt(runLengths[i]);
646
654
  }