@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,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 Uint32Array(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 Uint32Array(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 Uint32Array(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 Uint32Array(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 {\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: Uint32Array, requiredLength: number): Uint32Array {\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 Uint32Array(newLength);\n next.set(buffer);\n return next;\n}\n\nfunction ensureUint8Capacity(buffer: Uint8Array, requiredLength: number): Uint8Array {\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);\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<Uint32Array | undefined>;\n dataPointers: Int32Array;\n byteContainer: Uint8Array;\n bitWidthFrequencies: Int32Array;\n bestBitWidthPlan: Int32Array;\n};\n\nexport function fastPack32(\n inValues: Uint32Array,\n inPos: number,\n out: Uint32Array,\n outPos: number,\n bitWidth: number,\n): 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<Uint32Array | undefined> = new Array(BIT_WIDTH_SLOTS);\n for (let k = 1; k < BIT_WIDTH_SLOTS; k++) {\n dataToBePacked[k] = new Uint32Array(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),\n bitWidthFrequencies: new Int32Array(BIT_WIDTH_SLOTS),\n bestBitWidthPlan: new Int32Array(3),\n };\n}\n\nfunction computeBestBitWidthPlan(inValues: Uint32Array, 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<Uint32Array | 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 Uint32Array(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: Uint32Array,\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: Uint32Array; outPos: number };\n\nfunction packBlock(inValues: Uint32Array, 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: Uint32Array,\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: Uint32Array,\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(\n inValues: Uint32Array,\n inLength: number,\n state: EncodeState,\n workspace: FastPforEncoderWorkspace,\n): 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: Uint32Array,\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(\n values: Uint32Array,\n workspace: FastPforEncoderWorkspace,\n): Uint32Array {\n const state: EncodeState = { inPos: 0, outPos: 0, out: new Uint32Array(values.length + 1024) };\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,37 +1,37 @@
1
1
  import IntWrapper from "../decoding/intWrapper";
2
2
  export declare function encodeVarintInt32Value(value: number, dst: Uint8Array, offset: IntWrapper): void;
3
- export declare function encodeVarintInt32(values: Int32Array): Uint8Array;
4
- export declare function encodeVarintInt64(values: BigInt64Array): Uint8Array;
3
+ export declare function encodeVarintInt32(values: Uint32Array): 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: Uint32Array): 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
- export declare function encodeZigZagInt32(data: Int32Array): void;
11
- export declare function encodeZigZagInt64(data: BigInt64Array): void;
10
+ export declare function encodeZigZagInt32(data: Int32Array): Uint32Array;
11
+ export declare function encodeZigZagInt64(data: BigInt64Array): BigUint64Array;
12
12
  export declare function encodeZigZagFloat64(data: Float64Array): void;
13
- export declare function encodeUnsignedRleInt32(input: Int32Array): {
14
- data: Int32Array;
13
+ export declare function encodeUnsignedRleInt32(input: Uint32Array): {
14
+ data: Uint32Array;
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): {
22
22
  data: Float64Array;
23
23
  runs: number;
24
24
  };
25
- export declare function encodeZigZagDeltaInt32(data: Int32Array): void;
26
- export declare function encodeZigZagDeltaInt64(data: BigInt64Array): void;
25
+ export declare function encodeZigZagDeltaInt32(data: Int32Array): Uint32Array;
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
- data: Int32Array;
29
+ data: Uint32Array;
30
30
  runs: number;
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
  };
@@ -43,26 +43,26 @@ export declare function encodeZigZagRleFloat64(input: Float64Array): {
43
43
  /**
44
44
  * This is not really a encode, but more of a decode method...
45
45
  */
46
- export declare function encodeDeltaInt32(data: Int32Array): void;
47
- export declare function encodeComponentwiseDeltaVec2(data: Int32Array): void;
48
- export declare function encodeComponentwiseDeltaVec2Scaled(data: Int32Array, scale: number): void;
46
+ export declare function encodeDeltaInt32(data: Int32Array | Uint32Array): void;
47
+ export declare function encodeComponentwiseDeltaVec2(data: Int32Array): Uint32Array;
48
+ export declare function encodeComponentwiseDeltaVec2Scaled(data: Int32Array, scale: number): Uint32Array;
49
49
  export declare function encodeZigZagRleDeltaInt32(values: Int32Array | number[]): {
50
- data: Int32Array;
50
+ data: Uint32Array;
51
51
  runs: number;
52
52
  numTotalValues: number;
53
53
  };
54
- export declare function encodeRleDeltaInt32(values: Int32Array | number[]): {
55
- data: Int32Array;
54
+ export declare function encodeRleDeltaInt32(values: Uint32Array | number[]): {
55
+ data: Uint32Array;
56
56
  runs: number;
57
57
  numTotalValues: number;
58
58
  };
59
59
  export declare function encodeDeltaRleInt32(input: Int32Array): {
60
- data: Int32Array;
60
+ data: Uint32Array;
61
61
  runs: number;
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
  };