@maplibre/mlt 1.1.7 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/decoding/bigEndianDecode.d.ts +1 -1
  2. package/dist/decoding/bigEndianDecode.js.map +1 -1
  3. package/dist/decoding/decodingTestUtils.d.ts +3 -2
  4. package/dist/decoding/decodingTestUtils.js +21 -22
  5. package/dist/decoding/decodingTestUtils.js.map +1 -1
  6. package/dist/decoding/fastPforDecoder.d.ts +5 -6
  7. package/dist/decoding/fastPforDecoder.js +6 -6
  8. package/dist/decoding/fastPforDecoder.js.map +1 -1
  9. package/dist/decoding/fastPforShared.d.ts +0 -2
  10. package/dist/decoding/fastPforShared.js.map +1 -1
  11. package/dist/decoding/fastPforUnpack.d.ts +23 -23
  12. package/dist/decoding/fastPforUnpack.js.map +1 -1
  13. package/dist/decoding/geometryDecoder.js +41 -41
  14. package/dist/decoding/geometryDecoder.js.map +1 -1
  15. package/dist/decoding/intWrapper.js +0 -1
  16. package/dist/decoding/intWrapper.js.map +1 -1
  17. package/dist/decoding/integerDecodingUtils.d.ts +21 -17
  18. package/dist/decoding/integerDecodingUtils.js +71 -30
  19. package/dist/decoding/integerDecodingUtils.js.map +1 -1
  20. package/dist/decoding/integerStreamDecoder.d.ts +14 -10
  21. package/dist/decoding/integerStreamDecoder.js +150 -63
  22. package/dist/decoding/integerStreamDecoder.js.map +1 -1
  23. package/dist/decoding/propertyDecoder.js +33 -27
  24. package/dist/decoding/propertyDecoder.js.map +1 -1
  25. package/dist/decoding/stringDecoder.d.ts +1 -1
  26. package/dist/decoding/stringDecoder.js +32 -30
  27. package/dist/decoding/stringDecoder.js.map +1 -1
  28. package/dist/decoding/unpackNullableUtils.d.ts +2 -2
  29. package/dist/decoding/unpackNullableUtils.js.map +1 -1
  30. package/dist/encoding/bigEndianEncode.d.ts +1 -1
  31. package/dist/encoding/bigEndianEncode.js.map +1 -1
  32. package/dist/encoding/constGeometryVectorEncoder.js +9 -9
  33. package/dist/encoding/constGeometryVectorEncoder.js.map +1 -1
  34. package/dist/encoding/encodingUtils.d.ts +1 -1
  35. package/dist/encoding/encodingUtils.js +1 -1
  36. package/dist/encoding/encodingUtils.js.map +1 -1
  37. package/dist/encoding/fastPforEncoder.d.ts +4 -5
  38. package/dist/encoding/fastPforEncoder.js +4 -4
  39. package/dist/encoding/fastPforEncoder.js.map +1 -1
  40. package/dist/encoding/integerEncodingUtils.d.ts +14 -14
  41. package/dist/encoding/integerEncodingUtils.js +39 -31
  42. package/dist/encoding/integerEncodingUtils.js.map +1 -1
  43. package/dist/encoding/integerStreamEncoder.d.ts +2 -1
  44. package/dist/encoding/integerStreamEncoder.js +52 -18
  45. package/dist/encoding/integerStreamEncoder.js.map +1 -1
  46. package/dist/encoding/propertyEncoder.js +9 -16
  47. package/dist/encoding/propertyEncoder.js.map +1 -1
  48. package/dist/encoding/stringEncoder.js +9 -42
  49. package/dist/encoding/stringEncoder.js.map +1 -1
  50. package/dist/metadata/tile/logicalStreamType.d.ts +5 -9
  51. package/dist/metadata/tile/logicalStreamType.js +1 -19
  52. package/dist/metadata/tile/logicalStreamType.js.map +1 -1
  53. package/dist/metadata/tile/physicalLevelTechnique.d.ts +1 -5
  54. package/dist/metadata/tile/physicalLevelTechnique.js +0 -4
  55. package/dist/metadata/tile/physicalLevelTechnique.js.map +1 -1
  56. package/dist/metadata/tile/streamMetadataDecoder.d.ts +1 -1
  57. package/dist/metadata/tile/streamMetadataDecoder.js +9 -4
  58. package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
  59. package/dist/mltDecoder.js +25 -29
  60. package/dist/mltDecoder.js.map +1 -1
  61. package/dist/vector/constant/{intConstVector.d.ts → int32ConstVector.d.ts} +2 -2
  62. package/dist/vector/constant/int32ConstVector.js +10 -0
  63. package/dist/vector/constant/int32ConstVector.js.map +1 -0
  64. package/dist/vector/constant/{longConstVector.d.ts → int64ConstVector.d.ts} +2 -2
  65. package/dist/vector/constant/int64ConstVector.js +10 -0
  66. package/dist/vector/constant/int64ConstVector.js.map +1 -0
  67. package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -1
  68. package/dist/vector/dictionary/stringDictionaryVector.js +0 -1
  69. package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
  70. package/dist/vector/featureTable.d.ts +4 -4
  71. package/dist/vector/featureTable.js +9 -14
  72. package/dist/vector/featureTable.js.map +1 -1
  73. package/dist/vector/filter/flatSelectionVector.js +0 -2
  74. package/dist/vector/filter/flatSelectionVector.js.map +1 -1
  75. package/dist/vector/filter/sequenceSelectionVector.js +1 -5
  76. package/dist/vector/filter/sequenceSelectionVector.js.map +1 -1
  77. package/dist/vector/flat/bitVector.js +0 -2
  78. package/dist/vector/flat/bitVector.js.map +1 -1
  79. package/dist/vector/flat/booleanFlatVector.js +0 -1
  80. package/dist/vector/flat/booleanFlatVector.js.map +1 -1
  81. package/dist/vector/flat/{intFlatVector.d.ts → int32FlatVector.d.ts} +1 -1
  82. package/dist/vector/flat/{intFlatVector.js → int32FlatVector.js} +2 -2
  83. package/dist/vector/flat/int32FlatVector.js.map +1 -0
  84. package/dist/vector/flat/{longFlatVector.d.ts → int64FlatVector.d.ts} +1 -1
  85. package/dist/vector/flat/{longFlatVector.js → int64FlatVector.js} +2 -2
  86. package/dist/vector/flat/int64FlatVector.js.map +1 -0
  87. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -1
  88. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +1 -7
  89. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
  90. package/dist/vector/geometry/constGeometryVector.d.ts +3 -3
  91. package/dist/vector/geometry/constGeometryVector.js +0 -2
  92. package/dist/vector/geometry/constGeometryVector.js.map +1 -1
  93. package/dist/vector/geometry/constGpuVector.d.ts +2 -2
  94. package/dist/vector/geometry/constGpuVector.js +0 -2
  95. package/dist/vector/geometry/constGpuVector.js.map +1 -1
  96. package/dist/vector/geometry/flatGeometryVector.d.ts +3 -3
  97. package/dist/vector/geometry/flatGeometryVector.js +1 -5
  98. package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
  99. package/dist/vector/geometry/flatGpuVector.d.ts +2 -2
  100. package/dist/vector/geometry/flatGpuVector.js +0 -1
  101. package/dist/vector/geometry/flatGpuVector.js.map +1 -1
  102. package/dist/vector/geometry/geometryVector.d.ts +3 -3
  103. package/dist/vector/geometry/geometryVector.js +0 -5
  104. package/dist/vector/geometry/geometryVector.js.map +1 -1
  105. package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
  106. package/dist/vector/geometry/gpuVector.d.ts +4 -4
  107. package/dist/vector/geometry/gpuVector.js +0 -4
  108. package/dist/vector/geometry/gpuVector.js.map +1 -1
  109. package/dist/vector/geometry/topologyVector.d.ts +3 -3
  110. package/dist/vector/geometry/topologyVector.js.map +1 -1
  111. package/dist/vector/idVector.d.ts +8 -0
  112. package/dist/vector/idVector.js +2 -0
  113. package/dist/vector/idVector.js.map +1 -0
  114. package/dist/vector/sequence/{intSequenceVector.d.ts → int32SequenceVector.d.ts} +1 -1
  115. package/dist/vector/sequence/{intSequenceVector.js → int32SequenceVector.js} +2 -2
  116. package/dist/vector/sequence/int32SequenceVector.js.map +1 -0
  117. package/dist/vector/sequence/{longSequenceVector.d.ts → int64SequenceVector.d.ts} +1 -1
  118. package/dist/vector/sequence/{longSequenceVector.js → int64SequenceVector.js} +2 -2
  119. package/dist/vector/sequence/int64SequenceVector.js.map +1 -0
  120. package/dist/vector/sequence/sequenceVector.js +0 -1
  121. package/dist/vector/sequence/sequenceVector.js.map +1 -1
  122. package/dist/vector/variableSizeVector.js +0 -1
  123. package/dist/vector/variableSizeVector.js.map +1 -1
  124. package/dist/vector/vector.js +0 -4
  125. package/dist/vector/vector.js.map +1 -1
  126. package/package.json +7 -7
  127. package/dist/vector/constant/intConstVector.js +0 -10
  128. package/dist/vector/constant/intConstVector.js.map +0 -1
  129. package/dist/vector/constant/longConstVector.js +0 -10
  130. package/dist/vector/constant/longConstVector.js.map +0 -1
  131. package/dist/vector/flat/intFlatVector.js.map +0 -1
  132. package/dist/vector/flat/longFlatVector.js.map +0 -1
  133. package/dist/vector/intVector.d.ts +0 -8
  134. package/dist/vector/intVector.js +0 -2
  135. package/dist/vector/intVector.js.map +0 -1
  136. package/dist/vector/sequence/intSequenceVector.js.map +0 -1
  137. package/dist/vector/sequence/longSequenceVector.js.map +0 -1
@@ -3,17 +3,17 @@ import { LogicalScalarType, ScalarType } from "./metadata/tileset/tilesetMetadat
3
3
  import IntWrapper from "./decoding/intWrapper";
4
4
  import { decodeStreamMetadata } from "./metadata/tile/streamMetadataDecoder";
5
5
  import { VectorType } from "./vector/vectorType";
6
- import { IntFlatVector } from "./vector/flat/intFlatVector";
6
+ import { Int32FlatVector } from "./vector/flat/int32FlatVector";
7
7
  import BitVector from "./vector/flat/bitVector";
8
- import { decodeConstIntStream, decodeConstLongStream, decodeIntStream, decodeLongFloat64Stream, decodeLongStream, decodeSequenceIntStream, decodeSequenceLongStream, getVectorType, } from "./decoding/integerStreamDecoder";
9
- import { IntSequenceVector } from "./vector/sequence/intSequenceVector";
10
- import { LongFlatVector } from "./vector/flat/longFlatVector";
11
- import { LongSequenceVector } from "./vector/sequence/longSequenceVector";
8
+ import { decodeUnsignedConstInt32Stream, decodeUnsignedConstInt64Stream, decodeUnsignedInt64AsFloat64Stream, decodeUnsignedInt32Stream, decodeUnsignedInt64Stream, decodeSequenceInt32Stream, decodeSequenceInt64Stream, getVectorType, } from "./decoding/integerStreamDecoder";
9
+ import { Int32SequenceVector } from "./vector/sequence/int32SequenceVector";
10
+ import { Int64FlatVector } from "./vector/flat/int64FlatVector";
11
+ import { Int64SequenceVector } from "./vector/sequence/int64SequenceVector";
12
12
  import { decodeVarintInt32 } from "./decoding/integerDecodingUtils";
13
13
  import { decodeGeometryColumn } from "./decoding/geometryDecoder";
14
14
  import { decodePropertyColumn } from "./decoding/propertyDecoder";
15
- import { IntConstVector } from "./vector/constant/intConstVector";
16
- import { LongConstVector } from "./vector/constant/longConstVector";
15
+ import { Int32ConstVector } from "./vector/constant/int32ConstVector";
16
+ import { Int64ConstVector } from "./vector/constant/int64ConstVector";
17
17
  import { decodeBooleanRle } from "./decoding/decodingUtils";
18
18
  import { DoubleFlatVector } from "./vector/flat/doubleFlatVector";
19
19
  import { decodeEmbeddedTileSetMetadata } from "./metadata/tileset/embeddedTilesetMetadataDecoder";
@@ -42,12 +42,8 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
42
42
  offset.set(blockEnd);
43
43
  continue;
44
44
  }
45
- // Decode embedded metadata and extent (one of each per block)
46
- const decode = decodeEmbeddedTileSetMetadata(tile, offset);
47
- const metadata = decode[0];
48
- const extent = decode[1];
45
+ const [metadata, extent] = decodeEmbeddedTileSetMetadata(tile, offset);
49
46
  const featureTableMetadata = metadata.featureTables[0];
50
- // Decode columns from streams
51
47
  let idVector = null;
52
48
  let geometryVector = null;
53
49
  const propertyVectors = [];
@@ -84,9 +80,8 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
84
80
  geometryVector = decodeGeometryColumn(tile, numStreams, offset, numFeatures, geometryScaling);
85
81
  }
86
82
  else {
87
- // Property columns: STRING and STRUCT have stream count, others don't
88
- const hasStreamCnt = hasStreamCount(columnMetadata);
89
- const numStreams = hasStreamCnt ? decodeVarintInt32(tile, offset, 1)[0] : 1;
83
+ const columnHasStreamCount = hasStreamCount(columnMetadata);
84
+ const numStreams = columnHasStreamCount ? decodeVarintInt32(tile, offset, 1)[0] : 1;
90
85
  if (numStreams === 0) {
91
86
  continue;
92
87
  }
@@ -117,39 +112,40 @@ function decodeIdColumn(tile, columnMetadata, offset, columnName, idDataStreamMe
117
112
  throw new Error(`ID column must be a logical ID scalar type: ${columnName}`);
118
113
  }
119
114
  const idDataType = scalarTypeMetadata.longID ? ScalarType.UINT_64 : ScalarType.UINT_32;
120
- const vectorType = getVectorType(idDataStreamMetadata, sizeOrNullabilityBuffer, tile, offset);
115
+ const nullabilityBuffer = typeof sizeOrNullabilityBuffer === "number" ? undefined : sizeOrNullabilityBuffer;
116
+ const vectorType = getVectorType(idDataStreamMetadata, sizeOrNullabilityBuffer, tile, offset, idDataType === ScalarType.UINT_64 ? "int64" : "int32");
121
117
  if (idDataType === ScalarType.UINT_32) {
122
118
  switch (vectorType) {
123
119
  case VectorType.FLAT: {
124
- const id = decodeIntStream(tile, offset, idDataStreamMetadata, false, undefined, typeof sizeOrNullabilityBuffer !== "number" ? sizeOrNullabilityBuffer : undefined);
125
- return new IntFlatVector(columnName, id, sizeOrNullabilityBuffer);
120
+ const id = decodeUnsignedInt32Stream(tile, offset, idDataStreamMetadata, undefined, nullabilityBuffer);
121
+ return new Int32FlatVector(columnName, id, sizeOrNullabilityBuffer);
126
122
  }
127
123
  case VectorType.SEQUENCE: {
128
- const id = decodeSequenceIntStream(tile, offset, idDataStreamMetadata);
129
- return new IntSequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
124
+ const id = decodeSequenceInt32Stream(tile, offset, idDataStreamMetadata);
125
+ return new Int32SequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
130
126
  }
131
127
  case VectorType.CONST: {
132
- const id = decodeConstIntStream(tile, offset, idDataStreamMetadata, false);
133
- return new IntConstVector(columnName, id, sizeOrNullabilityBuffer);
128
+ const id = decodeUnsignedConstInt32Stream(tile, offset, idDataStreamMetadata);
129
+ return new Int32ConstVector(columnName, id, sizeOrNullabilityBuffer, false);
134
130
  }
135
131
  }
136
132
  }
137
133
  switch (vectorType) {
138
134
  case VectorType.FLAT: {
139
135
  if (idWithinMaxSafeInteger) {
140
- const id = decodeLongFloat64Stream(tile, offset, idDataStreamMetadata, false);
136
+ const id = decodeUnsignedInt64AsFloat64Stream(tile, offset, idDataStreamMetadata);
141
137
  return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);
142
138
  }
143
- const id = decodeLongStream(tile, offset, idDataStreamMetadata, false, typeof sizeOrNullabilityBuffer !== "number" ? sizeOrNullabilityBuffer : undefined);
144
- return new LongFlatVector(columnName, id, sizeOrNullabilityBuffer);
139
+ const id = decodeUnsignedInt64Stream(tile, offset, idDataStreamMetadata, nullabilityBuffer);
140
+ return new Int64FlatVector(columnName, id, sizeOrNullabilityBuffer);
145
141
  }
146
142
  case VectorType.SEQUENCE: {
147
- const id = decodeSequenceLongStream(tile, offset, idDataStreamMetadata);
148
- return new LongSequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
143
+ const id = decodeSequenceInt64Stream(tile, offset, idDataStreamMetadata);
144
+ return new Int64SequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
149
145
  }
150
146
  case VectorType.CONST: {
151
- const id = decodeConstLongStream(tile, offset, idDataStreamMetadata, false);
152
- return new LongConstVector(columnName, id, sizeOrNullabilityBuffer);
147
+ const id = decodeUnsignedConstInt64Stream(tile, offset, idDataStreamMetadata);
148
+ return new Int64ConstVector(columnName, id, sizeOrNullabilityBuffer, false);
153
149
  }
154
150
  }
155
151
  throw new Error("Vector type not supported for id column.");
@@ -1 +1 @@
1
- {"version":3,"file":"mltDecoder.js","sourceRoot":"","sources":["../src/mltDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import FeatureTable from \"./vector/featureTable\";\nimport { type Column, LogicalScalarType, ScalarType } from \"./metadata/tileset/tilesetMetadata\";\nimport IntWrapper from \"./decoding/intWrapper\";\nimport { decodeStreamMetadata, type RleEncodedStreamMetadata } from \"./metadata/tile/streamMetadataDecoder\";\nimport { VectorType } from \"./vector/vectorType\";\nimport { IntFlatVector } from \"./vector/flat/intFlatVector\";\nimport BitVector from \"./vector/flat/bitVector\";\nimport {\n decodeConstIntStream,\n decodeConstLongStream,\n decodeIntStream,\n decodeLongFloat64Stream,\n decodeLongStream,\n decodeSequenceIntStream,\n decodeSequenceLongStream,\n getVectorType,\n} from \"./decoding/integerStreamDecoder\";\nimport { IntSequenceVector } from \"./vector/sequence/intSequenceVector\";\nimport { LongFlatVector } from \"./vector/flat/longFlatVector\";\nimport { LongSequenceVector } from \"./vector/sequence/longSequenceVector\";\nimport type { IntVector } from \"./vector/intVector\";\nimport { decodeVarintInt32 } from \"./decoding/integerDecodingUtils\";\nimport { decodeGeometryColumn } from \"./decoding/geometryDecoder\";\nimport { decodePropertyColumn } from \"./decoding/propertyDecoder\";\nimport { IntConstVector } from \"./vector/constant/intConstVector\";\nimport { LongConstVector } from \"./vector/constant/longConstVector\";\nimport type GeometryScaling from \"./decoding/geometryScaling\";\nimport { decodeBooleanRle } from \"./decoding/decodingUtils\";\nimport { DoubleFlatVector } from \"./vector/flat/doubleFlatVector\";\nimport { decodeEmbeddedTileSetMetadata } from \"./metadata/tileset/embeddedTilesetMetadataDecoder\";\nimport { hasStreamCount, isGeometryColumn, isLogicalIdColumn } from \"./metadata/tileset/typeMap\";\nimport type { StreamMetadata } from \"./metadata/tile/streamMetadataDecoder\";\nimport type { GeometryVector } from \"./vector/geometry/geometryVector\";\nimport type Vector from \"./vector/vector\";\nimport type { GpuVector } from \"./vector/geometry/gpuVector\";\n\n/**\n * Decodes a tile with embedded metadata (Tag 0x01 format).\n * This is the primary decoder function for MLT tiles.\n *\n * @param tile The tile data to decode (will be decompressed if gzip-compressed)\n * @param geometryScaling Optional geometry scaling parameters\n * @param idWithinMaxSafeInteger If true, limits ID values to JavaScript safe integer range (53 bits)\n */\nexport default function decodeTile(\n tile: Uint8Array,\n geometryScaling?: GeometryScaling,\n idWithinMaxSafeInteger = true,\n): FeatureTable[] {\n const offset = new IntWrapper(0);\n const featureTables: FeatureTable[] = [];\n\n while (offset.get() < tile.length) {\n const blockLength = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n const blockStart = offset.get();\n const blockEnd = blockStart + blockLength;\n if (blockEnd > tile.length) {\n throw new Error(`Block overruns tile: ${blockEnd} > ${tile.length}`);\n }\n\n const tag = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n if (tag !== 1) {\n // Skip unknown block types\n offset.set(blockEnd);\n continue;\n }\n\n // Decode embedded metadata and extent (one of each per block)\n const decode = decodeEmbeddedTileSetMetadata(tile, offset);\n const metadata = decode[0];\n const extent = decode[1];\n const featureTableMetadata = metadata.featureTables[0];\n\n // Decode columns from streams\n let idVector: IntVector | null = null;\n let geometryVector: GeometryVector | GpuVector | null = null;\n const propertyVectors: Vector[] = [];\n let numFeatures = 0;\n\n for (const columnMetadata of featureTableMetadata.columns) {\n const columnName = columnMetadata.name;\n\n if (isLogicalIdColumn(columnMetadata)) {\n let nullabilityBuffer = null;\n // Check column metadata nullable flag, not numStreams (ID columns don't have stream count)\n if (columnMetadata.nullable) {\n const presentStreamMetadata = decodeStreamMetadata(tile, offset);\n const streamDataStart = offset.get();\n const values = decodeBooleanRle(\n tile,\n presentStreamMetadata.numValues,\n presentStreamMetadata.byteLength,\n offset,\n );\n offset.set(streamDataStart + presentStreamMetadata.byteLength);\n nullabilityBuffer = new BitVector(values, presentStreamMetadata.numValues);\n }\n\n const idDataStreamMetadata = decodeStreamMetadata(tile, offset);\n // decompressedCount is the count WITHOUT nulls, but we may have nulls\n numFeatures = nullabilityBuffer ? nullabilityBuffer.size() : idDataStreamMetadata.decompressedCount;\n\n idVector = decodeIdColumn(\n tile,\n columnMetadata,\n offset,\n columnName,\n idDataStreamMetadata,\n nullabilityBuffer ?? numFeatures,\n idWithinMaxSafeInteger,\n );\n } else if (isGeometryColumn(columnMetadata)) {\n const numStreams = decodeVarintInt32(tile, offset, 1)[0];\n\n // If no ID column, get numFeatures from geometry type stream metadata\n if (numFeatures === 0) {\n const savedOffset = offset.get();\n const geometryTypeMetadata = decodeStreamMetadata(tile, offset);\n numFeatures = geometryTypeMetadata.decompressedCount;\n offset.set(savedOffset); // Reset to re-read in decodeGeometryColumn\n }\n\n if (geometryScaling) {\n geometryScaling.scale = geometryScaling.extent / extent;\n }\n\n geometryVector = decodeGeometryColumn(tile, numStreams, offset, numFeatures, geometryScaling);\n } else {\n // Property columns: STRING and STRUCT have stream count, others don't\n const hasStreamCnt = hasStreamCount(columnMetadata);\n const numStreams = hasStreamCnt ? decodeVarintInt32(tile, offset, 1)[0] : 1;\n\n if (numStreams === 0) {\n continue;\n }\n\n const propertyVector = decodePropertyColumn(\n tile,\n offset,\n columnMetadata,\n numStreams,\n numFeatures,\n undefined,\n );\n if (propertyVector) {\n if (Array.isArray(propertyVector)) {\n for (const property of propertyVector) {\n propertyVectors.push(property);\n }\n } else {\n propertyVectors.push(propertyVector);\n }\n }\n }\n }\n\n const featureTable = new FeatureTable(\n featureTableMetadata.name,\n geometryVector,\n idVector,\n propertyVectors,\n extent,\n );\n featureTables.push(featureTable);\n offset.set(blockEnd);\n }\n\n return featureTables;\n}\n\nfunction decodeIdColumn(\n tile: Uint8Array,\n columnMetadata: Column,\n offset: IntWrapper,\n columnName: string,\n idDataStreamMetadata: StreamMetadata,\n sizeOrNullabilityBuffer: number | BitVector,\n idWithinMaxSafeInteger = false,\n): IntVector {\n const scalarTypeMetadata = columnMetadata.scalarType;\n if (\n !scalarTypeMetadata ||\n scalarTypeMetadata.type !== \"logicalType\" ||\n scalarTypeMetadata.logicalType !== LogicalScalarType.ID\n ) {\n throw new Error(`ID column must be a logical ID scalar type: ${columnName}`);\n }\n\n const idDataType = scalarTypeMetadata.longID ? ScalarType.UINT_64 : ScalarType.UINT_32;\n\n const vectorType = getVectorType(idDataStreamMetadata, sizeOrNullabilityBuffer, tile, offset);\n if (idDataType === ScalarType.UINT_32) {\n switch (vectorType) {\n case VectorType.FLAT: {\n const id = decodeIntStream(\n tile,\n offset,\n idDataStreamMetadata,\n false,\n undefined,\n typeof sizeOrNullabilityBuffer !== \"number\" ? sizeOrNullabilityBuffer : undefined,\n );\n return new IntFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceIntStream(tile, offset, idDataStreamMetadata);\n return new IntSequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeConstIntStream(tile, offset, idDataStreamMetadata, false);\n return new IntConstVector(columnName, id, sizeOrNullabilityBuffer);\n }\n }\n }\n switch (vectorType) {\n case VectorType.FLAT: {\n if (idWithinMaxSafeInteger) {\n const id = decodeLongFloat64Stream(tile, offset, idDataStreamMetadata, false);\n return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n const id = decodeLongStream(\n tile,\n offset,\n idDataStreamMetadata,\n false,\n typeof sizeOrNullabilityBuffer !== \"number\" ? sizeOrNullabilityBuffer : undefined,\n );\n return new LongFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceLongStream(tile, offset, idDataStreamMetadata);\n return new LongSequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeConstLongStream(tile, offset, idDataStreamMetadata, false);\n return new LongConstVector(columnName, id, sizeOrNullabilityBuffer);\n }\n }\n\n throw new Error(\"Vector type not supported for id column.\");\n}\n"]}
1
+ {"version":3,"file":"mltDecoder.js","sourceRoot":"","sources":["../src/mltDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import FeatureTable from \"./vector/featureTable\";\nimport { type Column, LogicalScalarType, ScalarType } from \"./metadata/tileset/tilesetMetadata\";\nimport IntWrapper from \"./decoding/intWrapper\";\nimport { decodeStreamMetadata, type RleEncodedStreamMetadata } from \"./metadata/tile/streamMetadataDecoder\";\nimport { VectorType } from \"./vector/vectorType\";\nimport { Int32FlatVector } from \"./vector/flat/int32FlatVector\";\nimport BitVector from \"./vector/flat/bitVector\";\nimport {\n decodeUnsignedConstInt32Stream,\n decodeUnsignedConstInt64Stream,\n decodeUnsignedInt64AsFloat64Stream,\n decodeUnsignedInt32Stream,\n decodeUnsignedInt64Stream,\n decodeSequenceInt32Stream,\n decodeSequenceInt64Stream,\n getVectorType,\n} from \"./decoding/integerStreamDecoder\";\nimport { Int32SequenceVector } from \"./vector/sequence/int32SequenceVector\";\nimport { Int64FlatVector } from \"./vector/flat/int64FlatVector\";\nimport { Int64SequenceVector } from \"./vector/sequence/int64SequenceVector\";\nimport type { IdVector } from \"./vector/idVector\";\nimport { decodeVarintInt32 } from \"./decoding/integerDecodingUtils\";\nimport { decodeGeometryColumn } from \"./decoding/geometryDecoder\";\nimport { decodePropertyColumn } from \"./decoding/propertyDecoder\";\nimport { Int32ConstVector } from \"./vector/constant/int32ConstVector\";\nimport { Int64ConstVector } from \"./vector/constant/int64ConstVector\";\nimport type GeometryScaling from \"./decoding/geometryScaling\";\nimport { decodeBooleanRle } from \"./decoding/decodingUtils\";\nimport { DoubleFlatVector } from \"./vector/flat/doubleFlatVector\";\nimport { decodeEmbeddedTileSetMetadata } from \"./metadata/tileset/embeddedTilesetMetadataDecoder\";\nimport { hasStreamCount, isGeometryColumn, isLogicalIdColumn } from \"./metadata/tileset/typeMap\";\nimport type { StreamMetadata } from \"./metadata/tile/streamMetadataDecoder\";\nimport type { GeometryVector } from \"./vector/geometry/geometryVector\";\nimport type Vector from \"./vector/vector\";\nimport type { GpuVector } from \"./vector/geometry/gpuVector\";\n\n/**\n * Decodes a tile with embedded metadata (Tag 0x01 format).\n * This is the primary decoder function for MLT tiles.\n *\n * @param tile The tile data to decode (will be decompressed if gzip-compressed)\n * @param geometryScaling Optional geometry scaling parameters\n * @param idWithinMaxSafeInteger If true, limits ID values to JavaScript safe integer range (53 bits)\n */\nexport default function decodeTile(\n tile: Uint8Array,\n geometryScaling?: GeometryScaling,\n idWithinMaxSafeInteger = true,\n): FeatureTable[] {\n const offset = new IntWrapper(0);\n const featureTables: FeatureTable[] = [];\n\n while (offset.get() < tile.length) {\n const blockLength = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n const blockStart = offset.get();\n const blockEnd = blockStart + blockLength;\n if (blockEnd > tile.length) {\n throw new Error(`Block overruns tile: ${blockEnd} > ${tile.length}`);\n }\n\n const tag = decodeVarintInt32(tile, offset, 1)[0] >>> 0;\n if (tag !== 1) {\n // Skip unknown block types\n offset.set(blockEnd);\n continue;\n }\n\n const [metadata, extent] = decodeEmbeddedTileSetMetadata(tile, offset);\n const featureTableMetadata = metadata.featureTables[0];\n\n let idVector: IdVector | null = null;\n let geometryVector: GeometryVector | GpuVector | null = null;\n const propertyVectors: Vector[] = [];\n let numFeatures = 0;\n\n for (const columnMetadata of featureTableMetadata.columns) {\n const columnName = columnMetadata.name;\n\n if (isLogicalIdColumn(columnMetadata)) {\n let nullabilityBuffer = null;\n // Check column metadata nullable flag, not numStreams (ID columns don't have stream count)\n if (columnMetadata.nullable) {\n const presentStreamMetadata = decodeStreamMetadata(tile, offset);\n const streamDataStart = offset.get();\n const values = decodeBooleanRle(\n tile,\n presentStreamMetadata.numValues,\n presentStreamMetadata.byteLength,\n offset,\n );\n offset.set(streamDataStart + presentStreamMetadata.byteLength);\n nullabilityBuffer = new BitVector(values, presentStreamMetadata.numValues);\n }\n\n const idDataStreamMetadata = decodeStreamMetadata(tile, offset);\n // decompressedCount is the count WITHOUT nulls, but we may have nulls\n numFeatures = nullabilityBuffer ? nullabilityBuffer.size() : idDataStreamMetadata.decompressedCount;\n\n idVector = decodeIdColumn(\n tile,\n columnMetadata,\n offset,\n columnName,\n idDataStreamMetadata,\n nullabilityBuffer ?? numFeatures,\n idWithinMaxSafeInteger,\n );\n } else if (isGeometryColumn(columnMetadata)) {\n const numStreams = decodeVarintInt32(tile, offset, 1)[0];\n\n // If no ID column, get numFeatures from geometry type stream metadata\n if (numFeatures === 0) {\n const savedOffset = offset.get();\n const geometryTypeMetadata = decodeStreamMetadata(tile, offset);\n numFeatures = geometryTypeMetadata.decompressedCount;\n offset.set(savedOffset); // Reset to re-read in decodeGeometryColumn\n }\n\n if (geometryScaling) {\n geometryScaling.scale = geometryScaling.extent / extent;\n }\n\n geometryVector = decodeGeometryColumn(tile, numStreams, offset, numFeatures, geometryScaling);\n } else {\n const columnHasStreamCount = hasStreamCount(columnMetadata);\n const numStreams = columnHasStreamCount ? decodeVarintInt32(tile, offset, 1)[0] : 1;\n\n if (numStreams === 0) {\n continue;\n }\n\n const propertyVector = decodePropertyColumn(\n tile,\n offset,\n columnMetadata,\n numStreams,\n numFeatures,\n undefined,\n );\n if (propertyVector) {\n if (Array.isArray(propertyVector)) {\n for (const property of propertyVector) {\n propertyVectors.push(property);\n }\n } else {\n propertyVectors.push(propertyVector);\n }\n }\n }\n }\n\n const featureTable = new FeatureTable(\n featureTableMetadata.name,\n geometryVector,\n idVector,\n propertyVectors,\n extent,\n );\n featureTables.push(featureTable);\n offset.set(blockEnd);\n }\n\n return featureTables;\n}\n\nfunction decodeIdColumn(\n tile: Uint8Array,\n columnMetadata: Column,\n offset: IntWrapper,\n columnName: string,\n idDataStreamMetadata: StreamMetadata,\n sizeOrNullabilityBuffer: number | BitVector,\n idWithinMaxSafeInteger = false,\n): IdVector {\n const scalarTypeMetadata = columnMetadata.scalarType;\n if (\n !scalarTypeMetadata ||\n scalarTypeMetadata.type !== \"logicalType\" ||\n scalarTypeMetadata.logicalType !== LogicalScalarType.ID\n ) {\n throw new Error(`ID column must be a logical ID scalar type: ${columnName}`);\n }\n\n const idDataType = scalarTypeMetadata.longID ? ScalarType.UINT_64 : ScalarType.UINT_32;\n const nullabilityBuffer = typeof sizeOrNullabilityBuffer === \"number\" ? undefined : sizeOrNullabilityBuffer;\n\n const vectorType = getVectorType(\n idDataStreamMetadata,\n sizeOrNullabilityBuffer,\n tile,\n offset,\n idDataType === ScalarType.UINT_64 ? \"int64\" : \"int32\",\n );\n if (idDataType === ScalarType.UINT_32) {\n switch (vectorType) {\n case VectorType.FLAT: {\n const id = decodeUnsignedInt32Stream(tile, offset, idDataStreamMetadata, undefined, nullabilityBuffer);\n return new Int32FlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceInt32Stream(tile, offset, idDataStreamMetadata);\n return new Int32SequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeUnsignedConstInt32Stream(tile, offset, idDataStreamMetadata);\n return new Int32ConstVector(columnName, id, sizeOrNullabilityBuffer, false);\n }\n }\n }\n switch (vectorType) {\n case VectorType.FLAT: {\n if (idWithinMaxSafeInteger) {\n const id = decodeUnsignedInt64AsFloat64Stream(tile, offset, idDataStreamMetadata);\n return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n const id = decodeUnsignedInt64Stream(tile, offset, idDataStreamMetadata, nullabilityBuffer);\n return new Int64FlatVector(columnName, id, sizeOrNullabilityBuffer);\n }\n case VectorType.SEQUENCE: {\n const id = decodeSequenceInt64Stream(tile, offset, idDataStreamMetadata);\n return new Int64SequenceVector(\n columnName,\n id[0],\n id[1],\n (idDataStreamMetadata as RleEncodedStreamMetadata).numRleValues,\n );\n }\n case VectorType.CONST: {\n const id = decodeUnsignedConstInt64Stream(tile, offset, idDataStreamMetadata);\n return new Int64ConstVector(columnName, id, sizeOrNullabilityBuffer, false);\n }\n }\n\n throw new Error(\"Vector type not supported for id column.\");\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type BitVector from "../flat/bitVector";
2
2
  import Vector from "../vector";
3
- export declare class IntConstVector extends Vector<Int32Array, number> {
4
- constructor(name: string, value: number, sizeOrNullabilityBuffer: number | BitVector);
3
+ export declare class Int32ConstVector extends Vector<Int32Array | Uint32Array, number> {
4
+ constructor(name: string, value: number, sizeOrNullabilityBuffer: number | BitVector, isSigned: boolean);
5
5
  protected getValueFromBuffer(_index: number): number;
6
6
  }
@@ -0,0 +1,10 @@
1
+ import Vector from "../vector";
2
+ export class Int32ConstVector extends Vector {
3
+ constructor(name, value, sizeOrNullabilityBuffer, isSigned) {
4
+ super(name, isSigned ? Int32Array.of(value) : Uint32Array.of(value), sizeOrNullabilityBuffer);
5
+ }
6
+ getValueFromBuffer(_index) {
7
+ return this.dataBuffer[0];
8
+ }
9
+ }
10
+ //# sourceMappingURL=int32ConstVector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int32ConstVector.js","sourceRoot":"","sources":["../../../src/vector/constant/int32ConstVector.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,MAAM,OAAO,gBAAiB,SAAQ,MAAwC;IAC1E,YAAmB,IAAY,EAAE,KAAa,EAAE,uBAA2C,EAAE,QAAiB;QAC1G,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC,CAAC;IAClG,CAAC;IAES,kBAAkB,CAAC,MAAc;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;CACJ","sourcesContent":["import type BitVector from \"../flat/bitVector\";\nimport Vector from \"../vector\";\n\nexport class Int32ConstVector extends Vector<Int32Array | Uint32Array, number> {\n public constructor(name: string, value: number, sizeOrNullabilityBuffer: number | BitVector, isSigned: boolean) {\n super(name, isSigned ? Int32Array.of(value) : Uint32Array.of(value), sizeOrNullabilityBuffer);\n }\n\n protected getValueFromBuffer(_index: number): number {\n return this.dataBuffer[0];\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type BitVector from "../flat/bitVector";
2
2
  import Vector from "../vector";
3
- export declare class LongConstVector extends Vector<BigInt64Array, bigint> {
4
- constructor(name: string, value: bigint, sizeOrNullabilityBuffer: number | BitVector);
3
+ export declare class Int64ConstVector extends Vector<BigInt64Array | BigUint64Array, bigint> {
4
+ constructor(name: string, value: bigint, sizeOrNullabilityBuffer: number | BitVector, isSigned: boolean);
5
5
  protected getValueFromBuffer(_index: number): bigint;
6
6
  }
@@ -0,0 +1,10 @@
1
+ import Vector from "../vector";
2
+ export class Int64ConstVector extends Vector {
3
+ constructor(name, value, sizeOrNullabilityBuffer, isSigned) {
4
+ super(name, isSigned ? BigInt64Array.of(value) : BigUint64Array.of(value), sizeOrNullabilityBuffer);
5
+ }
6
+ getValueFromBuffer(_index) {
7
+ return this.dataBuffer[0];
8
+ }
9
+ }
10
+ //# sourceMappingURL=int64ConstVector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int64ConstVector.js","sourceRoot":"","sources":["../../../src/vector/constant/int64ConstVector.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,MAAM,OAAO,gBAAiB,SAAQ,MAA8C;IAChF,YAAmB,IAAY,EAAE,KAAa,EAAE,uBAA2C,EAAE,QAAiB;QAC1G,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC,CAAC;IACxG,CAAC;IAES,kBAAkB,CAAC,MAAc;QACvC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;CACJ","sourcesContent":["import type BitVector from \"../flat/bitVector\";\nimport Vector from \"../vector\";\n\nexport class Int64ConstVector extends Vector<BigInt64Array | BigUint64Array, bigint> {\n public constructor(name: string, value: bigint, sizeOrNullabilityBuffer: number | BitVector, isSigned: boolean) {\n super(name, isSigned ? BigInt64Array.of(value) : BigUint64Array.of(value), sizeOrNullabilityBuffer);\n }\n\n protected getValueFromBuffer(_index: number): bigint {\n return this.dataBuffer[0];\n }\n}\n"]}
@@ -2,6 +2,6 @@ import { VariableSizeVector } from "../variableSizeVector";
2
2
  import type BitVector from "../flat/bitVector";
3
3
  export declare class StringDictionaryVector extends VariableSizeVector<Uint8Array, string> {
4
4
  private readonly indexBuffer;
5
- constructor(name: string, indexBuffer: Int32Array, offsetBuffer: Uint32Array, dictionaryBuffer: Uint8Array, nullabilityBuffer?: BitVector);
5
+ constructor(name: string, indexBuffer: Uint32Array, offsetBuffer: Uint32Array, dictionaryBuffer: Uint8Array, nullabilityBuffer?: BitVector);
6
6
  protected getValueFromBuffer(index: number): string;
7
7
  }
@@ -1,7 +1,6 @@
1
1
  import { VariableSizeVector } from "../variableSizeVector";
2
2
  import { decodeString } from "../../decoding/decodingUtils";
3
3
  export class StringDictionaryVector extends VariableSizeVector {
4
- indexBuffer;
5
4
  constructor(name, indexBuffer, offsetBuffer, dictionaryBuffer, nullabilityBuffer) {
6
5
  super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);
7
6
  this.indexBuffer = indexBuffer;
@@ -1 +1 @@
1
- {"version":3,"file":"stringDictionaryVector.js","sourceRoot":"","sources":["../../../src/vector/dictionary/stringDictionaryVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,sBAAuB,SAAQ,kBAAsC;IAGzD;IAFrB,YACI,IAAY,EACK,WAAuB,EACxC,YAAyB,EACzB,gBAA4B,EAC5B,iBAA6B;QAE7B,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QALpE,gBAAW,GAAX,WAAW,CAAY;QAMxC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;CACJ","sourcesContent":["import { VariableSizeVector } from \"../variableSizeVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { decodeString } from \"../../decoding/decodingUtils\";\n\nexport class StringDictionaryVector extends VariableSizeVector<Uint8Array, string> {\n constructor(\n name: string,\n private readonly indexBuffer: Int32Array,\n offsetBuffer: Uint32Array,\n dictionaryBuffer: Uint8Array,\n nullabilityBuffer?: BitVector,\n ) {\n super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);\n this.indexBuffer = indexBuffer;\n }\n\n protected getValueFromBuffer(index: number): string {\n const offset = this.indexBuffer[index];\n const start = this.offsetBuffer[offset];\n const end = this.offsetBuffer[offset + 1];\n return decodeString(this.dataBuffer, start, end);\n }\n}\n"]}
1
+ {"version":3,"file":"stringDictionaryVector.js","sourceRoot":"","sources":["../../../src/vector/dictionary/stringDictionaryVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,sBAAuB,SAAQ,kBAAsC;IAC9E,YACI,IAAY,EACK,WAAwB,EACzC,YAAyB,EACzB,gBAA4B,EAC5B,iBAA6B;QAE7B,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QALpE,gBAAW,GAAX,WAAW,CAAa;QAMzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;CACJ","sourcesContent":["import { VariableSizeVector } from \"../variableSizeVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { decodeString } from \"../../decoding/decodingUtils\";\n\nexport class StringDictionaryVector extends VariableSizeVector<Uint8Array, string> {\n constructor(\n name: string,\n private readonly indexBuffer: Uint32Array,\n offsetBuffer: Uint32Array,\n dictionaryBuffer: Uint8Array,\n nullabilityBuffer?: BitVector,\n ) {\n super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);\n this.indexBuffer = indexBuffer;\n }\n\n protected getValueFromBuffer(index: number): string {\n const offset = this.indexBuffer[index];\n const start = this.offsetBuffer[offset];\n const end = this.offsetBuffer[offset + 1];\n return decodeString(this.dataBuffer, start, end);\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { Geometry, GeometryVector } from "./geometry/geometryVector";
2
2
  import type Vector from "./vector";
3
- import type { IntVector } from "./intVector";
3
+ import type { IdVector } from "./idVector";
4
4
  import type { GpuVector } from "./geometry/gpuVector";
5
5
  export interface Feature {
6
6
  id: number | bigint;
@@ -16,9 +16,9 @@ export default class FeatureTable {
16
16
  private readonly _propertyVectors?;
17
17
  private readonly _extent;
18
18
  private propertyVectorsMap;
19
- constructor(_name: string, _geometryVector: GeometryVector | GpuVector, _idVector?: IntVector, _propertyVectors?: Vector[], _extent?: number);
19
+ constructor(_name: string, _geometryVector: GeometryVector | GpuVector, _idVector?: IdVector, _propertyVectors?: Vector[], _extent?: number);
20
20
  get name(): string;
21
- get idVector(): IntVector;
21
+ get idVector(): IdVector;
22
22
  get geometryVector(): GeometryVector | GpuVector;
23
23
  get propertyVectors(): Vector[];
24
24
  getPropertyVector(name: string): Vector;
@@ -28,5 +28,5 @@ export default class FeatureTable {
28
28
  * Returns all features as an array
29
29
  */
30
30
  getFeatures(): Feature[];
31
- private containsMaxSaveIntegerValues;
31
+ private containsMaxSafeIntegerValues;
32
32
  }
@@ -1,14 +1,8 @@
1
- import { IntFlatVector } from "./flat/intFlatVector";
1
+ import { Int32FlatVector } from "./flat/int32FlatVector";
2
2
  import { DoubleFlatVector } from "./flat/doubleFlatVector";
3
- import { IntSequenceVector } from "./sequence/intSequenceVector";
4
- import { IntConstVector } from "./constant/intConstVector";
3
+ import { Int32SequenceVector } from "./sequence/int32SequenceVector";
4
+ import { Int32ConstVector } from "./constant/int32ConstVector";
5
5
  export default class FeatureTable {
6
- _name;
7
- _geometryVector;
8
- _idVector;
9
- _propertyVectors;
10
- _extent;
11
- propertyVectorsMap;
12
6
  constructor(_name, _geometryVector, _idVector, _propertyVectors, _extent = 4096) {
13
7
  this._name = _name;
14
8
  this._geometryVector = _geometryVector;
@@ -50,7 +44,7 @@ export default class FeatureTable {
50
44
  let id;
51
45
  if (this.idVector) {
52
46
  const idValue = this.idVector.getValue(i);
53
- id = this.containsMaxSaveIntegerValues(this.idVector) && idValue !== null ? Number(idValue) : idValue;
47
+ id = this.containsMaxSafeIntegerValues(this.idVector) && idValue !== null ? Number(idValue) : idValue;
54
48
  }
55
49
  const geometry = {
56
50
  coordinates: geometries[i],
@@ -70,10 +64,11 @@ export default class FeatureTable {
70
64
  }
71
65
  return features;
72
66
  }
73
- containsMaxSaveIntegerValues(intVector) {
74
- return (intVector instanceof IntFlatVector ||
75
- (intVector instanceof IntConstVector && intVector instanceof IntSequenceVector) ||
76
- intVector instanceof DoubleFlatVector);
67
+ containsMaxSafeIntegerValues(idVector) {
68
+ return (idVector instanceof Int32FlatVector ||
69
+ idVector instanceof Int32ConstVector ||
70
+ idVector instanceof Int32SequenceVector ||
71
+ idVector instanceof DoubleFlatVector);
77
72
  }
78
73
  }
79
74
  //# sourceMappingURL=featureTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"featureTable.js","sourceRoot":"","sources":["../../src/vector/featureTable.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Geometry, GeometryVector } from \"./geometry/geometryVector\";\nimport type Vector from \"./vector\";\nimport type { IntVector } from \"./intVector\";\nimport { IntFlatVector } from \"./flat/intFlatVector\";\nimport { DoubleFlatVector } from \"./flat/doubleFlatVector\";\nimport { IntSequenceVector } from \"./sequence/intSequenceVector\";\nimport { IntConstVector } from \"./constant/intConstVector\";\nimport type { GpuVector } from \"./geometry/gpuVector\";\n\nexport interface Feature {\n id: number | bigint;\n geometry: Geometry;\n properties: { [key: string]: unknown };\n}\n\nexport default class FeatureTable {\n private propertyVectorsMap: Map<string, Vector>;\n\n constructor(\n private readonly _name: string,\n private readonly _geometryVector: GeometryVector | GpuVector,\n private readonly _idVector?: IntVector,\n private readonly _propertyVectors?: Vector[],\n private readonly _extent = 4096,\n ) {}\n\n get name(): string {\n return this._name;\n }\n\n get idVector(): IntVector {\n return this._idVector;\n }\n\n get geometryVector(): GeometryVector | GpuVector {\n return this._geometryVector;\n }\n\n get propertyVectors(): Vector[] {\n return this._propertyVectors;\n }\n\n getPropertyVector(name: string): Vector {\n if (!this.propertyVectorsMap) {\n this.propertyVectorsMap = new Map(this._propertyVectors.map((vector) => [vector.name, vector]));\n }\n\n return this.propertyVectorsMap.get(name);\n }\n\n get numFeatures(): number {\n return this.geometryVector.numGeometries;\n }\n\n get extent(): number {\n return this._extent;\n }\n\n /**\n * Returns all features as an array\n */\n getFeatures(): Feature[] {\n const features: Feature[] = [];\n const geometries = this.geometryVector.getGeometries();\n\n for (let i = 0; i < this.numFeatures; i++) {\n let id;\n if (this.idVector) {\n const idValue = this.idVector.getValue(i);\n id = this.containsMaxSaveIntegerValues(this.idVector) && idValue !== null ? Number(idValue) : idValue;\n }\n const geometry = {\n coordinates: geometries[i],\n type: this.geometryVector.geometryType(i),\n };\n\n const properties: { [key: string]: unknown } = {};\n for (const propertyColumn of this.propertyVectors) {\n if (!propertyColumn) continue;\n const columnName = propertyColumn.name;\n const propertyValue = propertyColumn.getValue(i);\n if (propertyValue !== null) {\n properties[columnName] = propertyValue;\n }\n }\n\n features.push({ id, geometry, properties });\n }\n return features;\n }\n\n private containsMaxSaveIntegerValues(intVector: IntVector) {\n return (\n intVector instanceof IntFlatVector ||\n (intVector instanceof IntConstVector && intVector instanceof IntSequenceVector) ||\n intVector instanceof DoubleFlatVector\n );\n }\n}\n"]}
1
+ {"version":3,"file":"featureTable.js","sourceRoot":"","sources":["../../src/vector/featureTable.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Geometry, GeometryVector } from \"./geometry/geometryVector\";\nimport type Vector from \"./vector\";\nimport type { IdVector } from \"./idVector\";\nimport { Int32FlatVector } from \"./flat/int32FlatVector\";\nimport { DoubleFlatVector } from \"./flat/doubleFlatVector\";\nimport { Int32SequenceVector } from \"./sequence/int32SequenceVector\";\nimport { Int32ConstVector } from \"./constant/int32ConstVector\";\nimport type { GpuVector } from \"./geometry/gpuVector\";\n\nexport interface Feature {\n id: number | bigint;\n geometry: Geometry;\n properties: { [key: string]: unknown };\n}\n\nexport default class FeatureTable {\n private propertyVectorsMap: Map<string, Vector>;\n\n constructor(\n private readonly _name: string,\n private readonly _geometryVector: GeometryVector | GpuVector,\n private readonly _idVector?: IdVector,\n private readonly _propertyVectors?: Vector[],\n private readonly _extent = 4096,\n ) {}\n\n get name(): string {\n return this._name;\n }\n\n get idVector(): IdVector {\n return this._idVector;\n }\n\n get geometryVector(): GeometryVector | GpuVector {\n return this._geometryVector;\n }\n\n get propertyVectors(): Vector[] {\n return this._propertyVectors;\n }\n\n getPropertyVector(name: string): Vector {\n if (!this.propertyVectorsMap) {\n this.propertyVectorsMap = new Map(this._propertyVectors.map((vector) => [vector.name, vector]));\n }\n\n return this.propertyVectorsMap.get(name);\n }\n\n get numFeatures(): number {\n return this.geometryVector.numGeometries;\n }\n\n get extent(): number {\n return this._extent;\n }\n\n /**\n * Returns all features as an array\n */\n getFeatures(): Feature[] {\n const features: Feature[] = [];\n const geometries = this.geometryVector.getGeometries();\n\n for (let i = 0; i < this.numFeatures; i++) {\n let id;\n if (this.idVector) {\n const idValue = this.idVector.getValue(i);\n id = this.containsMaxSafeIntegerValues(this.idVector) && idValue !== null ? Number(idValue) : idValue;\n }\n const geometry = {\n coordinates: geometries[i],\n type: this.geometryVector.geometryType(i),\n };\n\n const properties: { [key: string]: unknown } = {};\n for (const propertyColumn of this.propertyVectors) {\n if (!propertyColumn) continue;\n const columnName = propertyColumn.name;\n const propertyValue = propertyColumn.getValue(i);\n if (propertyValue !== null) {\n properties[columnName] = propertyValue;\n }\n }\n\n features.push({ id, geometry, properties });\n }\n return features;\n }\n\n private containsMaxSafeIntegerValues(idVector: IdVector) {\n return (\n idVector instanceof Int32FlatVector ||\n idVector instanceof Int32ConstVector ||\n idVector instanceof Int32SequenceVector ||\n idVector instanceof DoubleFlatVector\n );\n }\n}\n"]}
@@ -3,8 +3,6 @@
3
3
  * Stores indices explicitly, suitable for irregular patterns and frequent modifications.
4
4
  */
5
5
  export class FlatSelectionVector {
6
- _selectionVector;
7
- _limit;
8
6
  /**
9
7
  * @param _selectionVector
10
8
  * @param _limit In write mode the limit of a Buffer is the limit of how much data you can write into the buffer.
@@ -1 +1 @@
1
- {"version":3,"file":"flatSelectionVector.js","sourceRoot":"","sources":["../../../src/vector/filter/flatSelectionVector.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAOhB;IACA;IAPZ;;;;OAIG;IACH,YACY,gBAA0B,EAC1B,MAAe;QADf,qBAAgB,GAAhB,gBAAgB,CAAU;QAC1B,WAAM,GAAN,MAAM,CAAS;QAEvB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa,EAAE,KAAa;QACjC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACzC,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,kBAAkB;IAClB,eAAe;QACX,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ","sourcesContent":["import type { SelectionVector } from \"./selectionVector\";\n\n/**\n * Array-based SelectionVector for non-sequential selections.\n * Stores indices explicitly, suitable for irregular patterns and frequent modifications.\n */\nexport class FlatSelectionVector implements SelectionVector {\n /**\n * @param _selectionVector\n * @param _limit In write mode the limit of a Buffer is the limit of how much data you can write into the buffer.\n * In write mode the limit is equal to the capacity of the Buffer.\n */\n constructor(\n private _selectionVector: number[],\n private _limit?: number,\n ) {\n if (!this._limit) {\n this._limit = this._selectionVector.length;\n }\n }\n\n /** @inheritdoc */\n getIndex(index: number): number {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n\n return this._selectionVector[index];\n }\n\n /** @inheritdoc */\n setIndex(index: number, value: number): void {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n\n this._selectionVector[index] = value;\n }\n\n /** @inheritdoc */\n setLimit(limit: number): void {\n if (limit < 0 || limit > this.capacity) {\n throw new RangeError(\"Limit out of bounds\");\n }\n this._limit = limit;\n }\n\n /** @inheritdoc */\n selectionValues(): number[] {\n return this._selectionVector;\n }\n\n /** @inheritdoc */\n get capacity() {\n return this._selectionVector.length;\n }\n\n /** @inheritdoc */\n get limit() {\n return this._limit;\n }\n}\n"]}
1
+ {"version":3,"file":"flatSelectionVector.js","sourceRoot":"","sources":["../../../src/vector/filter/flatSelectionVector.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IAC5B;;;;OAIG;IACH,YACY,gBAA0B,EAC1B,MAAe;QADf,qBAAgB,GAAhB,gBAAgB,CAAU;QAC1B,WAAM,GAAN,MAAM,CAAS;QAEvB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC/C,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa,EAAE,KAAa;QACjC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IACzC,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,kBAAkB;IAClB,eAAe;QACX,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ","sourcesContent":["import type { SelectionVector } from \"./selectionVector\";\n\n/**\n * Array-based SelectionVector for non-sequential selections.\n * Stores indices explicitly, suitable for irregular patterns and frequent modifications.\n */\nexport class FlatSelectionVector implements SelectionVector {\n /**\n * @param _selectionVector\n * @param _limit In write mode the limit of a Buffer is the limit of how much data you can write into the buffer.\n * In write mode the limit is equal to the capacity of the Buffer.\n */\n constructor(\n private _selectionVector: number[],\n private _limit?: number,\n ) {\n if (!this._limit) {\n this._limit = this._selectionVector.length;\n }\n }\n\n /** @inheritdoc */\n getIndex(index: number): number {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n\n return this._selectionVector[index];\n }\n\n /** @inheritdoc */\n setIndex(index: number, value: number): void {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n\n this._selectionVector[index] = value;\n }\n\n /** @inheritdoc */\n setLimit(limit: number): void {\n if (limit < 0 || limit > this.capacity) {\n throw new RangeError(\"Limit out of bounds\");\n }\n this._limit = limit;\n }\n\n /** @inheritdoc */\n selectionValues(): number[] {\n return this._selectionVector;\n }\n\n /** @inheritdoc */\n get capacity() {\n return this._selectionVector.length;\n }\n\n /** @inheritdoc */\n get limit() {\n return this._limit;\n }\n}\n"]}
@@ -3,16 +3,12 @@
3
3
  * Calculates values on-demand, only materializes when modified.
4
4
  */
5
5
  export class SequenceSelectionVector {
6
- _baseValue;
7
- _delta;
8
- _limit;
9
- _capacity;
10
- _materializedArray = null;
11
6
  constructor(_baseValue, _delta, _limit, _capacity = _limit) {
12
7
  this._baseValue = _baseValue;
13
8
  this._delta = _delta;
14
9
  this._limit = _limit;
15
10
  this._capacity = _capacity;
11
+ this._materializedArray = null;
16
12
  }
17
13
  /** @inheritdoc */
18
14
  get limit() {
@@ -1 +1 @@
1
- {"version":3,"file":"sequenceSelectionVector.js","sourceRoot":"","sources":["../../../src/vector/filter/sequenceSelectionVector.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAIX;IACA;IACT;IACS;IANb,kBAAkB,GAAoB,IAAI,CAAC;IAEnD,YACqB,UAAkB,EAClB,MAAc,EACvB,MAAc,EACL,YAAoB,MAAM;QAH1B,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAQ;QACvB,WAAM,GAAN,MAAM,CAAQ;QACL,cAAS,GAAT,SAAS,CAAiB;IAC5C,CAAC;IAEJ,kBAAkB;IAClB,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,kBAAkB;IAClB,eAAe;QACX,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAEO,WAAW;QACf,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/C,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa,EAAE,KAAa;QACjC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;CACJ","sourcesContent":["import type { SelectionVector } from \"./selectionVector\";\n\n/**\n * Memory-efficient SelectionVector for arithmetic sequences (base + index * delta).\n * Calculates values on-demand, only materializes when modified.\n */\nexport class SequenceSelectionVector implements SelectionVector {\n private _materializedArray: number[] | null = null;\n\n constructor(\n private readonly _baseValue: number,\n private readonly _delta: number,\n private _limit: number,\n private readonly _capacity: number = _limit,\n ) {}\n\n /** @inheritdoc */\n get limit(): number {\n return this._limit;\n }\n\n /** @inheritdoc */\n get capacity(): number {\n return this._capacity;\n }\n\n /** @inheritdoc */\n selectionValues(): number[] {\n if (!this._materializedArray) {\n this._materializedArray = this.materialize();\n }\n return this._materializedArray;\n }\n\n private materialize(): number[] {\n const arr = new Array<number>(this._capacity);\n for (let i = 0; i < this._capacity; i++) {\n arr[i] = this._baseValue + i * this._delta;\n }\n return arr;\n }\n\n /** @inheritdoc */\n getIndex(index: number): number {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n if (this._materializedArray) {\n return this._materializedArray[index];\n }\n return this._baseValue + index * this._delta;\n }\n\n /** @inheritdoc */\n setIndex(index: number, value: number): void {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n if (!this._materializedArray) {\n this._materializedArray = this.materialize();\n }\n this._materializedArray[index] = value;\n }\n\n /** @inheritdoc */\n setLimit(limit: number): void {\n if (limit < 0 || limit > this.capacity) {\n throw new RangeError(\"Limit out of bounds\");\n }\n this._limit = limit;\n }\n}\n"]}
1
+ {"version":3,"file":"sequenceSelectionVector.js","sourceRoot":"","sources":["../../../src/vector/filter/sequenceSelectionVector.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAGhC,YACqB,UAAkB,EAClB,MAAc,EACvB,MAAc,EACL,YAAoB,MAAM;QAH1B,eAAU,GAAV,UAAU,CAAQ;QAClB,WAAM,GAAN,MAAM,CAAQ;QACvB,WAAM,GAAN,MAAM,CAAQ;QACL,cAAS,GAAT,SAAS,CAAiB;QANvC,uBAAkB,GAAoB,IAAI,CAAC;IAOhD,CAAC;IAEJ,kBAAkB;IAClB,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,kBAAkB;IAClB,eAAe;QACX,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAEO,WAAW;QACf,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QAC/C,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IACjD,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa,EAAE,KAAa;QACjC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED,kBAAkB;IAClB,QAAQ,CAAC,KAAa;QAClB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;CACJ","sourcesContent":["import type { SelectionVector } from \"./selectionVector\";\n\n/**\n * Memory-efficient SelectionVector for arithmetic sequences (base + index * delta).\n * Calculates values on-demand, only materializes when modified.\n */\nexport class SequenceSelectionVector implements SelectionVector {\n private _materializedArray: number[] | null = null;\n\n constructor(\n private readonly _baseValue: number,\n private readonly _delta: number,\n private _limit: number,\n private readonly _capacity: number = _limit,\n ) {}\n\n /** @inheritdoc */\n get limit(): number {\n return this._limit;\n }\n\n /** @inheritdoc */\n get capacity(): number {\n return this._capacity;\n }\n\n /** @inheritdoc */\n selectionValues(): number[] {\n if (!this._materializedArray) {\n this._materializedArray = this.materialize();\n }\n return this._materializedArray;\n }\n\n private materialize(): number[] {\n const arr = new Array<number>(this._capacity);\n for (let i = 0; i < this._capacity; i++) {\n arr[i] = this._baseValue + i * this._delta;\n }\n return arr;\n }\n\n /** @inheritdoc */\n getIndex(index: number): number {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n if (this._materializedArray) {\n return this._materializedArray[index];\n }\n return this._baseValue + index * this._delta;\n }\n\n /** @inheritdoc */\n setIndex(index: number, value: number): void {\n if (index >= this._limit || index < 0) {\n throw new RangeError(\"Index out of bounds\");\n }\n if (!this._materializedArray) {\n this._materializedArray = this.materialize();\n }\n this._materializedArray[index] = value;\n }\n\n /** @inheritdoc */\n setLimit(limit: number): void {\n if (limit < 0 || limit > this.capacity) {\n throw new RangeError(\"Limit out of bounds\");\n }\n this._limit = limit;\n }\n}\n"]}
@@ -1,6 +1,4 @@
1
1
  export default class BitVector {
2
- values;
3
- _size;
4
2
  /**
5
3
  * @param values The byte buffer containing the bit values in least-significant bit (LSB)
6
4
  * numbering
@@ -1 +1 @@
1
- {"version":3,"file":"bitVector.js","sourceRoot":"","sources":["../../../src/vector/flat/bitVector.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,SAAS;IACT,MAAM,CAAa;IACnB,KAAK,CAAS;IAE/B;;;OAGG;IACH,YAAY,MAAkB,EAAE,IAAY;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,KAAa;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,KAAc;QAC7B,oDAAoD;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,CAAC,KAAa;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI;QACA,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ","sourcesContent":["export default class BitVector {\n private readonly values: Uint8Array;\n private readonly _size: number;\n\n /**\n * @param values The byte buffer containing the bit values in least-significant bit (LSB)\n * numbering\n */\n constructor(values: Uint8Array, size: number) {\n this.values = values;\n this._size = size;\n }\n\n get(index: number): boolean {\n const byteIndex = Math.floor(index / 8);\n const bitIndex = index % 8;\n const b = this.values[byteIndex];\n return ((b >> bitIndex) & 1) === 1;\n }\n\n set(index: number, value: boolean): void {\n //TODO: refactor -> improve quick and dirty solution\n const byteIndex = Math.floor(index / 8);\n const bitIndex = index % 8;\n this.values[byteIndex] = this.values[byteIndex] | ((value ? 1 : 0) << bitIndex);\n }\n\n getInt(index: number): number {\n const byteIndex = Math.floor(index / 8);\n const bitIndex = index % 8;\n const b = this.values[byteIndex];\n return (b >> bitIndex) & 1;\n }\n\n size(): number {\n return this._size;\n }\n\n getBuffer(): Uint8Array {\n return this.values;\n }\n}\n"]}
1
+ {"version":3,"file":"bitVector.js","sourceRoot":"","sources":["../../../src/vector/flat/bitVector.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,SAAS;IAI1B;;;OAGG;IACH,YAAY,MAAkB,EAAE,IAAY;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,KAAa;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,KAAc;QAC7B,oDAAoD;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,CAAC,KAAa;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI;QACA,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ","sourcesContent":["export default class BitVector {\n private readonly values: Uint8Array;\n private readonly _size: number;\n\n /**\n * @param values The byte buffer containing the bit values in least-significant bit (LSB)\n * numbering\n */\n constructor(values: Uint8Array, size: number) {\n this.values = values;\n this._size = size;\n }\n\n get(index: number): boolean {\n const byteIndex = Math.floor(index / 8);\n const bitIndex = index % 8;\n const b = this.values[byteIndex];\n return ((b >> bitIndex) & 1) === 1;\n }\n\n set(index: number, value: boolean): void {\n //TODO: refactor -> improve quick and dirty solution\n const byteIndex = Math.floor(index / 8);\n const bitIndex = index % 8;\n this.values[byteIndex] = this.values[byteIndex] | ((value ? 1 : 0) << bitIndex);\n }\n\n getInt(index: number): number {\n const byteIndex = Math.floor(index / 8);\n const bitIndex = index % 8;\n const b = this.values[byteIndex];\n return (b >> bitIndex) & 1;\n }\n\n size(): number {\n return this._size;\n }\n\n getBuffer(): Uint8Array {\n return this.values;\n }\n}\n"]}
@@ -1,6 +1,5 @@
1
1
  import Vector from "../vector";
2
2
  export class BooleanFlatVector extends Vector {
3
- dataVector;
4
3
  constructor(name, dataVector, sizeOrNullabilityBuffer) {
5
4
  super(name, dataVector.getBuffer(), sizeOrNullabilityBuffer);
6
5
  this.dataVector = dataVector;
@@ -1 +1 @@
1
- {"version":3,"file":"booleanFlatVector.js","sourceRoot":"","sources":["../../../src/vector/flat/booleanFlatVector.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,MAAM,OAAO,iBAAkB,SAAQ,MAA2B;IAC7C,UAAU,CAAY;IAEvC,YAAY,IAAY,EAAE,UAAqB,EAAE,uBAA2C;QACxF,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;CACJ","sourcesContent":["import type BitVector from \"./bitVector\";\nimport Vector from \"../vector\";\n\nexport class BooleanFlatVector extends Vector<Uint8Array, boolean> {\n private readonly dataVector: BitVector;\n\n constructor(name: string, dataVector: BitVector, sizeOrNullabilityBuffer: number | BitVector) {\n super(name, dataVector.getBuffer(), sizeOrNullabilityBuffer);\n this.dataVector = dataVector;\n }\n\n protected getValueFromBuffer(index: number): boolean {\n return this.dataVector.get(index);\n }\n}\n"]}
1
+ {"version":3,"file":"booleanFlatVector.js","sourceRoot":"","sources":["../../../src/vector/flat/booleanFlatVector.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,MAAM,OAAO,iBAAkB,SAAQ,MAA2B;IAG9D,YAAY,IAAY,EAAE,UAAqB,EAAE,uBAA2C;QACxF,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;CACJ","sourcesContent":["import type BitVector from \"./bitVector\";\nimport Vector from \"../vector\";\n\nexport class BooleanFlatVector extends Vector<Uint8Array, boolean> {\n private readonly dataVector: BitVector;\n\n constructor(name: string, dataVector: BitVector, sizeOrNullabilityBuffer: number | BitVector) {\n super(name, dataVector.getBuffer(), sizeOrNullabilityBuffer);\n this.dataVector = dataVector;\n }\n\n protected getValueFromBuffer(index: number): boolean {\n return this.dataVector.get(index);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import { FixedSizeVector } from "../fixedSizeVector";
2
- export declare class IntFlatVector extends FixedSizeVector<Int32Array, number> {
2
+ export declare class Int32FlatVector extends FixedSizeVector<Int32Array | Uint32Array, number> {
3
3
  protected getValueFromBuffer(index: number): number;
4
4
  }
@@ -1,7 +1,7 @@
1
1
  import { FixedSizeVector } from "../fixedSizeVector";
2
- export class IntFlatVector extends FixedSizeVector {
2
+ export class Int32FlatVector extends FixedSizeVector {
3
3
  getValueFromBuffer(index) {
4
4
  return this.dataBuffer[index];
5
5
  }
6
6
  }
7
- //# sourceMappingURL=intFlatVector.js.map
7
+ //# sourceMappingURL=int32FlatVector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int32FlatVector.js","sourceRoot":"","sources":["../../../src/vector/flat/int32FlatVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,OAAO,eAAgB,SAAQ,eAAiD;IACxE,kBAAkB,CAAC,KAAa;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CACJ","sourcesContent":["import { FixedSizeVector } from \"../fixedSizeVector\";\n\nexport class Int32FlatVector extends FixedSizeVector<Int32Array | Uint32Array, number> {\n protected getValueFromBuffer(index: number): number {\n return this.dataBuffer[index];\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
1
  import { FixedSizeVector } from "../fixedSizeVector";
2
- export declare class LongFlatVector extends FixedSizeVector<BigInt64Array, bigint> {
2
+ export declare class Int64FlatVector extends FixedSizeVector<BigInt64Array | BigUint64Array, bigint> {
3
3
  protected getValueFromBuffer(index: number): bigint;
4
4
  }
@@ -1,7 +1,7 @@
1
1
  import { FixedSizeVector } from "../fixedSizeVector";
2
- export class LongFlatVector extends FixedSizeVector {
2
+ export class Int64FlatVector extends FixedSizeVector {
3
3
  getValueFromBuffer(index) {
4
4
  return this.dataBuffer[index];
5
5
  }
6
6
  }
7
- //# sourceMappingURL=longFlatVector.js.map
7
+ //# sourceMappingURL=int64FlatVector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int64FlatVector.js","sourceRoot":"","sources":["../../../src/vector/flat/int64FlatVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,OAAO,eAAgB,SAAQ,eAAuD;IAC9E,kBAAkB,CAAC,KAAa;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CACJ","sourcesContent":["import { FixedSizeVector } from \"../fixedSizeVector\";\n\nexport class Int64FlatVector extends FixedSizeVector<BigInt64Array | BigUint64Array, bigint> {\n protected getValueFromBuffer(index: number): bigint {\n return this.dataBuffer[index];\n }\n}\n"]}
@@ -6,7 +6,7 @@ export declare class StringFsstDictionaryVector extends VariableSizeVector<Uint8
6
6
  private readonly symbolTableBuffer;
7
7
  private symbolLengthBuffer;
8
8
  private decodedDictionary;
9
- constructor(name: string, indexBuffer: Int32Array, offsetBuffer: Uint32Array, dictionaryBuffer: Uint8Array, symbolOffsetBuffer: Uint32Array, symbolTableBuffer: Uint8Array, nullabilityBuffer: BitVector);
9
+ constructor(name: string, indexBuffer: Uint32Array, offsetBuffer: Uint32Array, dictionaryBuffer: Uint8Array, symbolOffsetBuffer: Uint32Array, symbolTableBuffer: Uint8Array, nullabilityBuffer: BitVector);
10
10
  protected getValueFromBuffer(index: number): string;
11
11
  private offsetToLengthBuffer;
12
12
  }
@@ -2,14 +2,8 @@ import { VariableSizeVector } from "../variableSizeVector";
2
2
  import { decodeFsst } from "../../decoding/fsstDecoder";
3
3
  import { decodeString } from "../../decoding/decodingUtils";
4
4
  export class StringFsstDictionaryVector extends VariableSizeVector {
5
- indexBuffer;
6
- symbolOffsetBuffer;
7
- symbolTableBuffer;
8
- // TODO: extend from StringVector
9
- symbolLengthBuffer;
10
- decodedDictionary;
11
5
  constructor(name, indexBuffer, offsetBuffer, dictionaryBuffer, symbolOffsetBuffer, symbolTableBuffer, nullabilityBuffer) {
12
- super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer);
6
+ super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);
13
7
  this.indexBuffer = indexBuffer;
14
8
  this.symbolOffsetBuffer = symbolOffsetBuffer;
15
9
  this.symbolTableBuffer = symbolTableBuffer;
@@ -1 +1 @@
1
- {"version":3,"file":"stringFsstDictionaryVector.js","sourceRoot":"","sources":["../../../src/vector/fsst-dictionary/stringFsstDictionaryVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,0BAA2B,SAAQ,kBAAsC;IAO7D;IAGA;IACA;IAVrB,iCAAiC;IACzB,kBAAkB,CAAc;IAChC,iBAAiB,CAAa;IAEtC,YACI,IAAY,EACK,WAAuB,EACxC,YAAyB,EACzB,gBAA4B,EACX,kBAA+B,EAC/B,iBAA6B,EAC9C,iBAA4B;QAE5B,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAP9C,gBAAW,GAAX,WAAW,CAAY;QAGvB,uBAAkB,GAAlB,kBAAkB,CAAa;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAY;IAIlD,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;gBAClC,2FAA2F;gBAC3F,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACjF,CAAC;YAED,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1G,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,mCAAmC;IAC3B,oBAAoB,CAAC,YAAyB;QAClD,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9D,IAAI,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,cAAc,CAAC;YAC9C,cAAc,GAAG,MAAM,CAAC;QAC5B,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;CACJ","sourcesContent":["import { VariableSizeVector } from \"../variableSizeVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { decodeFsst } from \"../../decoding/fsstDecoder\";\nimport { decodeString } from \"../../decoding/decodingUtils\";\n\nexport class StringFsstDictionaryVector extends VariableSizeVector<Uint8Array, string> {\n // TODO: extend from StringVector\n private symbolLengthBuffer: Uint32Array;\n private decodedDictionary: Uint8Array;\n\n constructor(\n name: string,\n private readonly indexBuffer: Int32Array,\n offsetBuffer: Uint32Array,\n dictionaryBuffer: Uint8Array,\n private readonly symbolOffsetBuffer: Uint32Array,\n private readonly symbolTableBuffer: Uint8Array,\n nullabilityBuffer: BitVector,\n ) {\n super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer);\n }\n\n protected getValueFromBuffer(index: number): string {\n if (this.decodedDictionary == null) {\n if (this.symbolLengthBuffer == null) {\n // TODO: change FsstEncoder to take offsets instead of length to get rid of this conversion\n this.symbolLengthBuffer = this.offsetToLengthBuffer(this.symbolOffsetBuffer);\n }\n\n this.decodedDictionary = decodeFsst(this.symbolTableBuffer, this.symbolLengthBuffer, this.dataBuffer);\n }\n\n const offset = this.indexBuffer[index];\n const start = this.offsetBuffer[offset];\n const end = this.offsetBuffer[offset + 1];\n return decodeString(this.decodedDictionary, start, end);\n }\n\n // TODO: get rid of that conversion\n private offsetToLengthBuffer(offsetBuffer: Uint32Array): Uint32Array {\n const lengthBuffer = new Uint32Array(offsetBuffer.length - 1);\n let previousOffset = offsetBuffer[0];\n for (let i = 1; i < offsetBuffer.length; i++) {\n const offset = offsetBuffer[i];\n lengthBuffer[i - 1] = offset - previousOffset;\n previousOffset = offset;\n }\n\n return lengthBuffer;\n }\n}\n"]}
1
+ {"version":3,"file":"stringFsstDictionaryVector.js","sourceRoot":"","sources":["../../../src/vector/fsst-dictionary/stringFsstDictionaryVector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,MAAM,OAAO,0BAA2B,SAAQ,kBAAsC;IAKlF,YACI,IAAY,EACK,WAAwB,EACzC,YAAyB,EACzB,gBAA4B,EACX,kBAA+B,EAC/B,iBAA6B,EAC9C,iBAA4B;QAE5B,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QAPpE,gBAAW,GAAX,WAAW,CAAa;QAGxB,uBAAkB,GAAlB,kBAAkB,CAAa;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAY;IAIlD,CAAC;IAES,kBAAkB,CAAC,KAAa;QACtC,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;gBAClC,2FAA2F;gBAC3F,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACjF,CAAC;YAED,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1G,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,mCAAmC;IAC3B,oBAAoB,CAAC,YAAyB;QAClD,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9D,IAAI,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,cAAc,CAAC;YAC9C,cAAc,GAAG,MAAM,CAAC;QAC5B,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;CACJ","sourcesContent":["import { VariableSizeVector } from \"../variableSizeVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { decodeFsst } from \"../../decoding/fsstDecoder\";\nimport { decodeString } from \"../../decoding/decodingUtils\";\n\nexport class StringFsstDictionaryVector extends VariableSizeVector<Uint8Array, string> {\n // TODO: extend from StringVector\n private symbolLengthBuffer: Uint32Array;\n private decodedDictionary: Uint8Array;\n\n constructor(\n name: string,\n private readonly indexBuffer: Uint32Array,\n offsetBuffer: Uint32Array,\n dictionaryBuffer: Uint8Array,\n private readonly symbolOffsetBuffer: Uint32Array,\n private readonly symbolTableBuffer: Uint8Array,\n nullabilityBuffer: BitVector,\n ) {\n super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);\n }\n\n protected getValueFromBuffer(index: number): string {\n if (this.decodedDictionary == null) {\n if (this.symbolLengthBuffer == null) {\n // TODO: change FsstEncoder to take offsets instead of length to get rid of this conversion\n this.symbolLengthBuffer = this.offsetToLengthBuffer(this.symbolOffsetBuffer);\n }\n\n this.decodedDictionary = decodeFsst(this.symbolTableBuffer, this.symbolLengthBuffer, this.dataBuffer);\n }\n\n const offset = this.indexBuffer[index];\n const start = this.offsetBuffer[offset];\n const end = this.offsetBuffer[offset + 1];\n return decodeString(this.decodedDictionary, start, end);\n }\n\n // TODO: get rid of that conversion\n private offsetToLengthBuffer(offsetBuffer: Uint32Array): Uint32Array {\n const lengthBuffer = new Uint32Array(offsetBuffer.length - 1);\n let previousOffset = offsetBuffer[0];\n for (let i = 1; i < offsetBuffer.length; i++) {\n const offset = offsetBuffer[i];\n lengthBuffer[i - 1] = offset - previousOffset;\n previousOffset = offset;\n }\n\n return lengthBuffer;\n }\n}\n"]}