@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.
- package/dist/decoding/bigEndianDecode.d.ts +13 -0
- package/dist/decoding/bigEndianDecode.js +50 -0
- package/dist/decoding/bigEndianDecode.js.map +1 -0
- package/dist/decoding/decodingTestUtils.d.ts +2 -2
- package/dist/decoding/decodingTestUtils.js +20 -21
- package/dist/decoding/decodingTestUtils.js.map +1 -1
- package/dist/decoding/decodingUtils.js +4 -2
- package/dist/decoding/decodingUtils.js.map +1 -1
- package/dist/decoding/fastPforDecoder.d.ts +47 -0
- package/dist/decoding/fastPforDecoder.js +482 -0
- package/dist/decoding/fastPforDecoder.js.map +1 -0
- package/dist/decoding/fastPforShared.d.ts +7 -0
- package/dist/decoding/fastPforShared.js +29 -0
- package/dist/decoding/fastPforShared.js.map +1 -0
- package/dist/decoding/fastPforUnpack.d.ts +23 -0
- package/dist/decoding/fastPforUnpack.js +910 -0
- package/dist/decoding/fastPforUnpack.js.map +1 -0
- package/dist/decoding/geometryDecoder.d.ts +2 -2
- package/dist/decoding/geometryDecoder.js +52 -49
- package/dist/decoding/geometryDecoder.js.map +1 -1
- package/dist/decoding/intWrapper.js +0 -1
- package/dist/decoding/intWrapper.js.map +1 -1
- package/dist/decoding/integerDecodingUtils.d.ts +33 -25
- package/dist/decoding/integerDecodingUtils.js +115 -52
- package/dist/decoding/integerDecodingUtils.js.map +1 -1
- package/dist/decoding/integerStreamDecoder.d.ts +15 -11
- package/dist/decoding/integerStreamDecoder.js +159 -65
- package/dist/decoding/integerStreamDecoder.js.map +1 -1
- package/dist/decoding/propertyDecoder.js +38 -36
- package/dist/decoding/propertyDecoder.js.map +1 -1
- package/dist/decoding/stringDecoder.js +19 -23
- package/dist/decoding/stringDecoder.js.map +1 -1
- package/dist/decoding/unpackNullableUtils.d.ts +2 -2
- package/dist/decoding/unpackNullableUtils.js.map +1 -1
- package/dist/encoding/bigEndianEncode.d.ts +7 -0
- package/dist/encoding/bigEndianEncode.js +16 -0
- package/dist/encoding/bigEndianEncode.js.map +1 -0
- package/dist/encoding/constGeometryVectorEncoder.d.ts +19 -0
- package/dist/encoding/constGeometryVectorEncoder.js +248 -0
- package/dist/encoding/constGeometryVectorEncoder.js.map +1 -0
- package/dist/encoding/encodingUtils.d.ts +2 -2
- package/dist/encoding/encodingUtils.js +3 -3
- package/dist/encoding/encodingUtils.js.map +1 -1
- package/dist/encoding/fastPforEncoder.d.ts +18 -0
- package/dist/encoding/fastPforEncoder.js +310 -0
- package/dist/encoding/fastPforEncoder.js.map +1 -0
- package/dist/encoding/integerEncodingUtils.d.ts +20 -20
- package/dist/encoding/integerEncodingUtils.js +64 -48
- package/dist/encoding/integerEncodingUtils.js.map +1 -1
- package/dist/encoding/integerStreamEncoder.d.ts +3 -2
- package/dist/encoding/integerStreamEncoder.js +57 -23
- package/dist/encoding/integerStreamEncoder.js.map +1 -1
- package/dist/encoding/packNullableUtils.d.ts +1 -1
- package/dist/encoding/packNullableUtils.js.map +1 -1
- package/dist/encoding/propertyEncoder.d.ts +1 -1
- package/dist/encoding/propertyEncoder.js +17 -24
- package/dist/encoding/propertyEncoder.js.map +1 -1
- package/dist/encoding/stringEncoder.js +9 -42
- package/dist/encoding/stringEncoder.js.map +1 -1
- package/dist/encoding/zOrderCurveEncoder.js +1 -1
- package/dist/encoding/zOrderCurveEncoder.js.map +1 -1
- package/dist/metadata/tile/logicalStreamType.d.ts +8 -12
- package/dist/metadata/tile/logicalStreamType.js +1 -19
- package/dist/metadata/tile/logicalStreamType.js.map +1 -1
- package/dist/metadata/tile/streamMetadataDecoder.d.ts +1 -1
- package/dist/metadata/tile/streamMetadataDecoder.js +9 -4
- package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.d.ts +1 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
- package/dist/metadata/tileset/typeMap.d.ts +10 -2
- package/dist/metadata/tileset/typeMap.js +25 -15
- package/dist/metadata/tileset/typeMap.js.map +1 -1
- package/dist/mltDecoder.js +46 -47
- package/dist/mltDecoder.js.map +1 -1
- package/dist/mltMetadata.js.map +1 -1
- package/dist/vector/constant/int32ConstVector.d.ts +6 -0
- package/dist/vector/constant/int32ConstVector.js +10 -0
- package/dist/vector/constant/int32ConstVector.js.map +1 -0
- package/dist/vector/constant/int64ConstVector.d.ts +6 -0
- package/dist/vector/constant/int64ConstVector.js +10 -0
- package/dist/vector/constant/int64ConstVector.js.map +1 -0
- package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -2
- package/dist/vector/dictionary/stringDictionaryVector.js +0 -3
- package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
- package/dist/vector/featureTable.d.ts +7 -8
- package/dist/vector/featureTable.js +10 -42
- package/dist/vector/featureTable.js.map +1 -1
- package/dist/vector/filter/flatSelectionVector.d.ts +1 -1
- package/dist/vector/filter/flatSelectionVector.js +0 -2
- package/dist/vector/filter/flatSelectionVector.js.map +1 -1
- package/dist/vector/filter/selectionVectorUtils.d.ts +1 -1
- package/dist/vector/filter/selectionVectorUtils.js.map +1 -1
- package/dist/vector/filter/sequenceSelectionVector.d.ts +1 -1
- package/dist/vector/filter/sequenceSelectionVector.js +1 -5
- package/dist/vector/filter/sequenceSelectionVector.js.map +1 -1
- package/dist/vector/flat/bitVector.js +0 -2
- package/dist/vector/flat/bitVector.js.map +1 -1
- package/dist/vector/flat/booleanFlatVector.js +0 -1
- package/dist/vector/flat/booleanFlatVector.js.map +1 -1
- package/dist/vector/flat/{intFlatVector.d.ts → int32FlatVector.d.ts} +1 -1
- package/dist/vector/flat/{intFlatVector.js → int32FlatVector.js} +2 -2
- package/dist/vector/flat/int32FlatVector.js.map +1 -0
- package/dist/vector/flat/{longFlatVector.d.ts → int64FlatVector.d.ts} +1 -1
- package/dist/vector/flat/{longFlatVector.js → int64FlatVector.js} +2 -2
- package/dist/vector/flat/int64FlatVector.js.map +1 -0
- package/dist/vector/flat/stringFlatVector.d.ts +0 -1
- package/dist/vector/flat/stringFlatVector.js +0 -2
- package/dist/vector/flat/stringFlatVector.js.map +1 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -3
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +0 -42
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
- package/dist/vector/geometry/constGeometryVector.d.ts +5 -5
- package/dist/vector/geometry/constGeometryVector.js +1 -3
- package/dist/vector/geometry/constGeometryVector.js.map +1 -1
- package/dist/vector/geometry/constGpuVector.d.ts +4 -4
- package/dist/vector/geometry/constGpuVector.js +1 -3
- package/dist/vector/geometry/constGpuVector.js.map +1 -1
- package/dist/vector/geometry/flatGeometryVector.d.ts +4 -4
- package/dist/vector/geometry/flatGeometryVector.js +1 -5
- package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
- package/dist/vector/geometry/flatGpuVector.d.ts +3 -3
- package/dist/vector/geometry/flatGpuVector.js +0 -1
- package/dist/vector/geometry/flatGpuVector.js.map +1 -1
- package/dist/vector/geometry/geometryType.js.map +1 -1
- package/dist/vector/geometry/geometryVector.d.ts +7 -8
- package/dist/vector/geometry/geometryVector.js +0 -13
- package/dist/vector/geometry/geometryVector.js.map +1 -1
- package/dist/vector/geometry/geometryVectorConverter.d.ts +1 -1
- package/dist/vector/geometry/geometryVectorConverter.js +167 -211
- package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
- package/dist/vector/geometry/gpuVector.d.ts +6 -6
- package/dist/vector/geometry/gpuVector.js +0 -4
- package/dist/vector/geometry/gpuVector.js.map +1 -1
- package/dist/vector/geometry/topologyVector.d.ts +5 -9
- package/dist/vector/geometry/topologyVector.js +1 -19
- package/dist/vector/geometry/topologyVector.js.map +1 -1
- package/dist/vector/geometry/vertexBufferType.js.map +1 -1
- package/dist/vector/idVector.d.ts +8 -0
- package/dist/vector/idVector.js +2 -0
- package/dist/vector/idVector.js.map +1 -0
- package/dist/vector/sequence/{intSequenceVector.d.ts → int32SequenceVector.d.ts} +1 -1
- package/dist/vector/sequence/{intSequenceVector.js → int32SequenceVector.js} +2 -2
- package/dist/vector/sequence/int32SequenceVector.js.map +1 -0
- package/dist/vector/sequence/{longSequenceVector.d.ts → int64SequenceVector.d.ts} +1 -1
- package/dist/vector/sequence/{longSequenceVector.js → int64SequenceVector.js} +2 -2
- package/dist/vector/sequence/int64SequenceVector.js.map +1 -0
- package/dist/vector/sequence/sequenceVector.js +0 -1
- package/dist/vector/sequence/sequenceVector.js.map +1 -1
- package/dist/vector/variableSizeVector.js +0 -1
- package/dist/vector/variableSizeVector.js.map +1 -1
- package/dist/vector/vector.js +1 -5
- package/dist/vector/vector.js.map +1 -1
- package/dist/vector/vectorType.js.map +1 -1
- package/package.json +9 -10
- package/dist/decoding/decodingUtils.spec.d.ts +0 -1
- package/dist/decoding/decodingUtils.spec.js +0 -141
- package/dist/decoding/decodingUtils.spec.js.map +0 -1
- package/dist/decoding/fsstDecoder.spec.d.ts +0 -1
- package/dist/decoding/fsstDecoder.spec.js +0 -57
- package/dist/decoding/fsstDecoder.spec.js.map +0 -1
- package/dist/decoding/integerDecodingUtils.spec.d.ts +0 -1
- package/dist/decoding/integerDecodingUtils.spec.js +0 -300
- package/dist/decoding/integerDecodingUtils.spec.js.map +0 -1
- package/dist/decoding/integerStreamDecoder.spec.d.ts +0 -1
- package/dist/decoding/integerStreamDecoder.spec.js +0 -402
- package/dist/decoding/integerStreamDecoder.spec.js.map +0 -1
- package/dist/decoding/propertyDecoder.spec.d.ts +0 -1
- package/dist/decoding/propertyDecoder.spec.js +0 -448
- package/dist/decoding/propertyDecoder.spec.js.map +0 -1
- package/dist/decoding/stringDecoder.spec.d.ts +0 -1
- package/dist/decoding/stringDecoder.spec.js +0 -387
- package/dist/decoding/stringDecoder.spec.js.map +0 -1
- package/dist/decoding/unpackNullableUtils.spec.d.ts +0 -1
- package/dist/decoding/unpackNullableUtils.spec.js +0 -71
- package/dist/decoding/unpackNullableUtils.spec.js.map +0 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.d.ts +0 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js +0 -142
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js.map +0 -1
- package/dist/mltDecoder.spec.d.ts +0 -1
- package/dist/mltDecoder.spec.js +0 -152
- package/dist/mltDecoder.spec.js.map +0 -1
- package/dist/vector/constant/intConstVector.d.ts +0 -6
- package/dist/vector/constant/intConstVector.js +0 -10
- package/dist/vector/constant/intConstVector.js.map +0 -1
- package/dist/vector/constant/longConstVector.d.ts +0 -6
- package/dist/vector/constant/longConstVector.js +0 -10
- package/dist/vector/constant/longConstVector.js.map +0 -1
- package/dist/vector/filter/flatSelectionVector.spec.d.ts +0 -1
- package/dist/vector/filter/flatSelectionVector.spec.js +0 -51
- package/dist/vector/filter/flatSelectionVector.spec.js.map +0 -1
- package/dist/vector/filter/selectionVectorUtil.spec.d.ts +0 -1
- package/dist/vector/filter/selectionVectorUtil.spec.js +0 -154
- package/dist/vector/filter/selectionVectorUtil.spec.js.map +0 -1
- package/dist/vector/filter/sequenceSelectionVector.spec.d.ts +0 -1
- package/dist/vector/filter/sequenceSelectionVector.spec.js +0 -115
- package/dist/vector/filter/sequenceSelectionVector.spec.js.map +0 -1
- package/dist/vector/flat/floatFlatVector.spec.d.ts +0 -1
- package/dist/vector/flat/floatFlatVector.spec.js +0 -14
- package/dist/vector/flat/floatFlatVector.spec.js.map +0 -1
- package/dist/vector/flat/intFlatVector.js.map +0 -1
- package/dist/vector/flat/intFlatVector.spec.d.ts +0 -1
- package/dist/vector/flat/intFlatVector.spec.js +0 -15
- package/dist/vector/flat/intFlatVector.spec.js.map +0 -1
- package/dist/vector/flat/longFlatVector.js.map +0 -1
- package/dist/vector/flat/longFlatVector.spec.d.ts +0 -1
- package/dist/vector/flat/longFlatVector.spec.js +0 -14
- package/dist/vector/flat/longFlatVector.spec.js.map +0 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.d.ts +0 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js +0 -28
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js.map +0 -1
- package/dist/vector/geometry/zOrderCurve.spec.d.ts +0 -1
- package/dist/vector/geometry/zOrderCurve.spec.js +0 -25
- package/dist/vector/geometry/zOrderCurve.spec.js.map +0 -1
- package/dist/vector/intVector.d.ts +0 -8
- package/dist/vector/intVector.js +0 -2
- package/dist/vector/intVector.js.map +0 -1
- package/dist/vector/sequence/intSequenceVector.js.map +0 -1
- package/dist/vector/sequence/longSequenceVector.js.map +0 -1
- package/dist/vector/sequence/longSequenceVektor.spec.d.ts +0 -1
- package/dist/vector/sequence/longSequenceVektor.spec.js +0 -11
- package/dist/vector/sequence/longSequenceVektor.spec.js.map +0 -1
package/dist/mltDecoder.js
CHANGED
|
@@ -1,25 +1,23 @@
|
|
|
1
1
|
import FeatureTable from "./vector/featureTable";
|
|
2
|
-
import { ScalarType } from "./metadata/tileset/tilesetMetadata";
|
|
2
|
+
import { LogicalScalarType, ScalarType } from "./metadata/tileset/tilesetMetadata";
|
|
3
3
|
import IntWrapper from "./decoding/intWrapper";
|
|
4
4
|
import { decodeStreamMetadata } from "./metadata/tile/streamMetadataDecoder";
|
|
5
5
|
import { VectorType } from "./vector/vectorType";
|
|
6
|
-
import {
|
|
6
|
+
import { Int32FlatVector } from "./vector/flat/int32FlatVector";
|
|
7
7
|
import BitVector from "./vector/flat/bitVector";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
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 {
|
|
16
|
-
import {
|
|
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";
|
|
20
|
-
import { hasStreamCount } from "./metadata/tileset/typeMap";
|
|
21
|
-
const ID_COLUMN_NAME = "id";
|
|
22
|
-
const GEOMETRY_COLUMN_NAME = "geometry";
|
|
20
|
+
import { hasStreamCount, isGeometryColumn, isLogicalIdColumn } from "./metadata/tileset/typeMap";
|
|
23
21
|
/**
|
|
24
22
|
* Decodes a tile with embedded metadata (Tag 0x01 format).
|
|
25
23
|
* This is the primary decoder function for MLT tiles.
|
|
@@ -44,19 +42,15 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
|
|
|
44
42
|
offset.set(blockEnd);
|
|
45
43
|
continue;
|
|
46
44
|
}
|
|
47
|
-
|
|
48
|
-
const decode = decodeEmbeddedTileSetMetadata(tile, offset);
|
|
49
|
-
const metadata = decode[0];
|
|
50
|
-
const extent = decode[1];
|
|
45
|
+
const [metadata, extent] = decodeEmbeddedTileSetMetadata(tile, offset);
|
|
51
46
|
const featureTableMetadata = metadata.featureTables[0];
|
|
52
|
-
// Decode columns from streams
|
|
53
47
|
let idVector = null;
|
|
54
48
|
let geometryVector = null;
|
|
55
49
|
const propertyVectors = [];
|
|
56
50
|
let numFeatures = 0;
|
|
57
51
|
for (const columnMetadata of featureTableMetadata.columns) {
|
|
58
52
|
const columnName = columnMetadata.name;
|
|
59
|
-
if (
|
|
53
|
+
if (isLogicalIdColumn(columnMetadata)) {
|
|
60
54
|
let nullabilityBuffer = null;
|
|
61
55
|
// Check column metadata nullable flag, not numStreams (ID columns don't have stream count)
|
|
62
56
|
if (columnMetadata.nullable) {
|
|
@@ -67,10 +61,11 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
|
|
|
67
61
|
nullabilityBuffer = new BitVector(values, presentStreamMetadata.numValues);
|
|
68
62
|
}
|
|
69
63
|
const idDataStreamMetadata = decodeStreamMetadata(tile, offset);
|
|
70
|
-
|
|
64
|
+
// decompressedCount is the count WITHOUT nulls, but we may have nulls
|
|
65
|
+
numFeatures = nullabilityBuffer ? nullabilityBuffer.size() : idDataStreamMetadata.decompressedCount;
|
|
71
66
|
idVector = decodeIdColumn(tile, columnMetadata, offset, columnName, idDataStreamMetadata, nullabilityBuffer ?? numFeatures, idWithinMaxSafeInteger);
|
|
72
67
|
}
|
|
73
|
-
else if (
|
|
68
|
+
else if (isGeometryColumn(columnMetadata)) {
|
|
74
69
|
const numStreams = decodeVarintInt32(tile, offset, 1)[0];
|
|
75
70
|
// If no ID column, get numFeatures from geometry type stream metadata
|
|
76
71
|
if (numFeatures === 0) {
|
|
@@ -85,9 +80,8 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
|
|
|
85
80
|
geometryVector = decodeGeometryColumn(tile, numStreams, offset, numFeatures, geometryScaling);
|
|
86
81
|
}
|
|
87
82
|
else {
|
|
88
|
-
|
|
89
|
-
const
|
|
90
|
-
const numStreams = hasStreamCnt ? decodeVarintInt32(tile, offset, 1)[0] : 1;
|
|
83
|
+
const columnHasStreamCount = hasStreamCount(columnMetadata);
|
|
84
|
+
const numStreams = columnHasStreamCount ? decodeVarintInt32(tile, offset, 1)[0] : 1;
|
|
91
85
|
if (numStreams === 0) {
|
|
92
86
|
continue;
|
|
93
87
|
}
|
|
@@ -111,42 +105,47 @@ export default function decodeTile(tile, geometryScaling, idWithinMaxSafeInteger
|
|
|
111
105
|
return featureTables;
|
|
112
106
|
}
|
|
113
107
|
function decodeIdColumn(tile, columnMetadata, offset, columnName, idDataStreamMetadata, sizeOrNullabilityBuffer, idWithinMaxSafeInteger = false) {
|
|
114
|
-
const
|
|
115
|
-
|
|
108
|
+
const scalarTypeMetadata = columnMetadata.scalarType;
|
|
109
|
+
if (!scalarTypeMetadata ||
|
|
110
|
+
scalarTypeMetadata.type !== "logicalType" ||
|
|
111
|
+
scalarTypeMetadata.logicalType !== LogicalScalarType.ID) {
|
|
112
|
+
throw new Error(`ID column must be a logical ID scalar type: ${columnName}`);
|
|
113
|
+
}
|
|
114
|
+
const idDataType = scalarTypeMetadata.longID ? ScalarType.UINT_64 : ScalarType.UINT_32;
|
|
115
|
+
const nullabilityBuffer = typeof sizeOrNullabilityBuffer === "number" ? undefined : sizeOrNullabilityBuffer;
|
|
116
|
+
const vectorType = getVectorType(idDataStreamMetadata, sizeOrNullabilityBuffer, tile, offset, idDataType === ScalarType.UINT_64 ? "int64" : "int32");
|
|
116
117
|
if (idDataType === ScalarType.UINT_32) {
|
|
117
118
|
switch (vectorType) {
|
|
118
119
|
case VectorType.FLAT: {
|
|
119
|
-
const id =
|
|
120
|
-
return new
|
|
120
|
+
const id = decodeUnsignedInt32Stream(tile, offset, idDataStreamMetadata, undefined, nullabilityBuffer);
|
|
121
|
+
return new Int32FlatVector(columnName, id, sizeOrNullabilityBuffer);
|
|
121
122
|
}
|
|
122
123
|
case VectorType.SEQUENCE: {
|
|
123
|
-
const id =
|
|
124
|
-
return new
|
|
124
|
+
const id = decodeSequenceInt32Stream(tile, offset, idDataStreamMetadata);
|
|
125
|
+
return new Int32SequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
|
|
125
126
|
}
|
|
126
127
|
case VectorType.CONST: {
|
|
127
|
-
const id =
|
|
128
|
-
return new
|
|
128
|
+
const id = decodeUnsignedConstInt32Stream(tile, offset, idDataStreamMetadata);
|
|
129
|
+
return new Int32ConstVector(columnName, id, sizeOrNullabilityBuffer, false);
|
|
129
130
|
}
|
|
130
131
|
}
|
|
131
132
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);
|
|
138
|
-
}
|
|
139
|
-
const id = decodeLongStream(tile, offset, idDataStreamMetadata, false);
|
|
140
|
-
return new LongFlatVector(columnName, id, sizeOrNullabilityBuffer);
|
|
141
|
-
}
|
|
142
|
-
case VectorType.SEQUENCE: {
|
|
143
|
-
const id = decodeSequenceLongStream(tile, offset, idDataStreamMetadata);
|
|
144
|
-
return new LongSequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
|
|
145
|
-
}
|
|
146
|
-
case VectorType.CONST: {
|
|
147
|
-
const id = decodeConstLongStream(tile, offset, idDataStreamMetadata, false);
|
|
148
|
-
return new LongConstVector(columnName, id, sizeOrNullabilityBuffer);
|
|
133
|
+
switch (vectorType) {
|
|
134
|
+
case VectorType.FLAT: {
|
|
135
|
+
if (idWithinMaxSafeInteger) {
|
|
136
|
+
const id = decodeUnsignedInt64AsFloat64Stream(tile, offset, idDataStreamMetadata);
|
|
137
|
+
return new DoubleFlatVector(columnName, id, sizeOrNullabilityBuffer);
|
|
149
138
|
}
|
|
139
|
+
const id = decodeUnsignedInt64Stream(tile, offset, idDataStreamMetadata, nullabilityBuffer);
|
|
140
|
+
return new Int64FlatVector(columnName, id, sizeOrNullabilityBuffer);
|
|
141
|
+
}
|
|
142
|
+
case VectorType.SEQUENCE: {
|
|
143
|
+
const id = decodeSequenceInt64Stream(tile, offset, idDataStreamMetadata);
|
|
144
|
+
return new Int64SequenceVector(columnName, id[0], id[1], idDataStreamMetadata.numRleValues);
|
|
145
|
+
}
|
|
146
|
+
case VectorType.CONST: {
|
|
147
|
+
const id = decodeUnsignedConstInt64Stream(tile, offset, idDataStreamMetadata);
|
|
148
|
+
return new Int64ConstVector(columnName, id, sizeOrNullabilityBuffer, false);
|
|
150
149
|
}
|
|
151
150
|
}
|
|
152
151
|
throw new Error("Vector type not supported for id column.");
|
package/dist/mltDecoder.js.map
CHANGED
|
@@ -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, 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 } 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\nconst ID_COLUMN_NAME = \"id\";\nconst GEOMETRY_COLUMN_NAME = \"geometry\";\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 (columnName === ID_COLUMN_NAME) {\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(tile, presentStreamMetadata.numValues, presentStreamMetadata.byteLength, offset);\n offset.set(streamDataStart + presentStreamMetadata.byteLength);\n nullabilityBuffer = new BitVector(values, presentStreamMetadata.numValues);\n }\n\n const idDataStreamMetadata = decodeStreamMetadata(tile, offset);\n numFeatures = 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 (columnName === GEOMETRY_COLUMN_NAME) {\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: boolean = false,\n): IntVector {\n const idDataType = columnMetadata.scalarType.physicalType;\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(tile, offset, idDataStreamMetadata, false);\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 } else {\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\n const id = decodeLongStream(tile, offset, idDataStreamMetadata, false);\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\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"]}
|
package/dist/mltMetadata.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mltMetadata.js","sourceRoot":"","sources":["../src/mltMetadata.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAWX;AAXD,WAAY,cAAc;IACtB,
|
|
1
|
+
{"version":3,"file":"mltMetadata.js","sourceRoot":"","sources":["../src/mltMetadata.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAWX;AAXD,WAAY,cAAc;IACtB,uDAAU,CAAA;IACV,qDAAS,CAAA;IACT,uDAAU,CAAA;IACV,uDAAU,CAAA;IACV,yDAAW,CAAA;IACX,yDAAW,CAAA;IACX,2DAAY,CAAA;IACZ,+DAAc,CAAA;IACd,+DAAc,CAAA;IACd,iEAAe,CAAA;AACnB,CAAC,EAXW,cAAc,KAAd,cAAc,QAWzB;AAED,MAAM,CAAN,IAAY,cAeX;AAfD,WAAY,cAAc;IACtB;;;SAGK;IACL,qDAAS,CAAA;IACT,uDAAU,CAAA;IACV,mEAAgB,CAAA;IAChB,iDAAO,CAAA;IACP,iEAAe,CAAA;IACf,2DAAY,CAAA;IACZ,+DAAc,CAAA;IACd,mFAAwB,CAAA;IACxB,6FAA6B,CAAA;IAC7B,iGAA+B,CAAA;AACnC,CAAC,EAfW,cAAc,KAAd,cAAc,QAezB","sourcesContent":["export enum ColumnDataType {\n STRING = 0,\n FLOAT = 1,\n DOUBLE = 2,\n INT_64 = 3,\n UINT_64 = 4,\n BOOLEAN = 5,\n GEOMETRY = 6,\n GEOMETRY_M = 7,\n GEOMETRY_Z = 8,\n GEOMETRY_ZM = 9,\n}\n\nexport enum ColumnEncoding {\n /*\n * String -> no dictionary coding\n * Geometry -> standard unsorted encoding\n * */\n PLAIN = 0,\n VARINT = 1,\n DELTA_VARINT = 2,\n RLE = 3,\n BOOLEAN_RLE = 4,\n BYTE_RLE = 5,\n DICTIONARY = 6,\n LOCALIZED_DICTIONARY = 7,\n ORDERED_GEOMETRY_ENCODING = 8,\n INDEXED_COORDINATE_ENCODING = 9,\n}\n\nexport interface ColumnMetadata {\n columnName: string;\n columnType: ColumnDataType;\n columnEncoding: ColumnEncoding;\n streams: Map<string, StreamMetadata>;\n}\n\nexport interface StreamMetadata {\n numValues: number;\n byteLength: number;\n}\n\nexport interface LayerMetadata {\n name: string;\n numColumns: number;\n numFeatures: number;\n columnMetadata: ColumnMetadata[];\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type BitVector from "../flat/bitVector";
|
|
2
|
+
import Vector from "../vector";
|
|
3
|
+
export declare class Int32ConstVector extends Vector<Int32Array | Uint32Array, number> {
|
|
4
|
+
constructor(name: string, value: number, sizeOrNullabilityBuffer: number | BitVector, isSigned: boolean);
|
|
5
|
+
protected getValueFromBuffer(_index: number): number;
|
|
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"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type BitVector from "../flat/bitVector";
|
|
2
|
+
import Vector from "../vector";
|
|
3
|
+
export declare class Int64ConstVector extends Vector<BigInt64Array | BigUint64Array, bigint> {
|
|
4
|
+
constructor(name: string, value: bigint, sizeOrNullabilityBuffer: number | BitVector, isSigned: boolean);
|
|
5
|
+
protected getValueFromBuffer(_index: number): bigint;
|
|
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,7 +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
|
-
|
|
6
|
-
constructor(name: string, indexBuffer: Int32Array, offsetBuffer: Uint32Array, dictionaryBuffer: Uint8Array, nullabilityBuffer?: BitVector);
|
|
5
|
+
constructor(name: string, indexBuffer: Uint32Array, offsetBuffer: Uint32Array, dictionaryBuffer: Uint8Array, nullabilityBuffer?: BitVector);
|
|
7
6
|
protected getValueFromBuffer(index: number): string;
|
|
8
7
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { VariableSizeVector } from "../variableSizeVector";
|
|
2
2
|
import { decodeString } from "../../decoding/decodingUtils";
|
|
3
3
|
export class StringDictionaryVector extends VariableSizeVector {
|
|
4
|
-
indexBuffer;
|
|
5
|
-
textEncoder;
|
|
6
4
|
constructor(name, indexBuffer, offsetBuffer, dictionaryBuffer, nullabilityBuffer) {
|
|
7
5
|
super(name, offsetBuffer, dictionaryBuffer, nullabilityBuffer ?? indexBuffer.length);
|
|
8
6
|
this.indexBuffer = indexBuffer;
|
|
9
7
|
this.indexBuffer = indexBuffer;
|
|
10
|
-
this.textEncoder = new TextEncoder();
|
|
11
8
|
}
|
|
12
9
|
getValueFromBuffer(index) {
|
|
13
10
|
const offset = this.indexBuffer[index];
|
|
@@ -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;
|
|
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,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Geometry, GeometryVector } from "./geometry/geometryVector";
|
|
2
2
|
import type Vector from "./vector";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import type { IdVector } from "./idVector";
|
|
4
|
+
import type { GpuVector } from "./geometry/gpuVector";
|
|
5
5
|
export interface Feature {
|
|
6
6
|
id: number | bigint;
|
|
7
7
|
geometry: Geometry;
|
|
@@ -9,25 +9,24 @@ export interface Feature {
|
|
|
9
9
|
[key: string]: unknown;
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
|
-
export default class FeatureTable
|
|
12
|
+
export default class FeatureTable {
|
|
13
13
|
private readonly _name;
|
|
14
14
|
private readonly _geometryVector;
|
|
15
15
|
private readonly _idVector?;
|
|
16
16
|
private readonly _propertyVectors?;
|
|
17
17
|
private readonly _extent;
|
|
18
18
|
private propertyVectorsMap;
|
|
19
|
-
constructor(_name: string, _geometryVector: GeometryVector | GpuVector, _idVector?:
|
|
19
|
+
constructor(_name: string, _geometryVector: GeometryVector | GpuVector, _idVector?: IdVector, _propertyVectors?: Vector[], _extent?: number);
|
|
20
20
|
get name(): string;
|
|
21
|
-
get idVector():
|
|
21
|
+
get idVector(): IdVector;
|
|
22
22
|
get geometryVector(): GeometryVector | GpuVector;
|
|
23
23
|
get propertyVectors(): Vector[];
|
|
24
24
|
getPropertyVector(name: string): Vector;
|
|
25
|
-
[Symbol.iterator](): Iterator<Feature>;
|
|
26
25
|
get numFeatures(): number;
|
|
27
26
|
get extent(): number;
|
|
28
27
|
/**
|
|
29
28
|
* Returns all features as an array
|
|
30
29
|
*/
|
|
31
30
|
getFeatures(): Feature[];
|
|
32
|
-
private
|
|
31
|
+
private containsMaxSafeIntegerValues;
|
|
33
32
|
}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Int32FlatVector } from "./flat/int32FlatVector";
|
|
2
2
|
import { DoubleFlatVector } from "./flat/doubleFlatVector";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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;
|
|
@@ -34,32 +28,6 @@ export default class FeatureTable {
|
|
|
34
28
|
}
|
|
35
29
|
return this.propertyVectorsMap.get(name);
|
|
36
30
|
}
|
|
37
|
-
*[Symbol.iterator]() {
|
|
38
|
-
const geometryIterator = this.geometryVector[Symbol.iterator]();
|
|
39
|
-
let index = 0;
|
|
40
|
-
while (index < this.numFeatures) {
|
|
41
|
-
let id;
|
|
42
|
-
if (this.idVector) {
|
|
43
|
-
id = this.containsMaxSaveIntegerValues(this.idVector)
|
|
44
|
-
? Number(this.idVector.getValue(index))
|
|
45
|
-
: this.idVector.getValue(index);
|
|
46
|
-
}
|
|
47
|
-
const geometry = geometryIterator?.next().value;
|
|
48
|
-
const properties = {};
|
|
49
|
-
for (const propertyColumn of this.propertyVectors) {
|
|
50
|
-
if (!propertyColumn) {
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
const columnName = propertyColumn.name;
|
|
54
|
-
const propertyValue = propertyColumn.getValue(index);
|
|
55
|
-
if (propertyValue !== null) {
|
|
56
|
-
properties[columnName] = propertyValue;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
index++;
|
|
60
|
-
yield { id, geometry, properties };
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
31
|
get numFeatures() {
|
|
64
32
|
return this.geometryVector.numGeometries;
|
|
65
33
|
}
|
|
@@ -75,9 +43,8 @@ export default class FeatureTable {
|
|
|
75
43
|
for (let i = 0; i < this.numFeatures; i++) {
|
|
76
44
|
let id;
|
|
77
45
|
if (this.idVector) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
: this.idVector.getValue(i);
|
|
46
|
+
const idValue = this.idVector.getValue(i);
|
|
47
|
+
id = this.containsMaxSafeIntegerValues(this.idVector) && idValue !== null ? Number(idValue) : idValue;
|
|
81
48
|
}
|
|
82
49
|
const geometry = {
|
|
83
50
|
coordinates: geometries[i],
|
|
@@ -97,10 +64,11 @@ export default class FeatureTable {
|
|
|
97
64
|
}
|
|
98
65
|
return features;
|
|
99
66
|
}
|
|
100
|
-
|
|
101
|
-
return (
|
|
102
|
-
|
|
103
|
-
|
|
67
|
+
containsMaxSafeIntegerValues(idVector) {
|
|
68
|
+
return (idVector instanceof Int32FlatVector ||
|
|
69
|
+
idVector instanceof Int32ConstVector ||
|
|
70
|
+
idVector instanceof Int32SequenceVector ||
|
|
71
|
+
idVector instanceof DoubleFlatVector);
|
|
104
72
|
}
|
|
105
73
|
}
|
|
106
74
|
//# sourceMappingURL=featureTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureTable.js","sourceRoot":"","sources":["../../src/vector/featureTable.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { SelectionVector } from "./selectionVector";
|
|
2
2
|
/**
|
|
3
3
|
* Array-based SelectionVector for non-sequential selections.
|
|
4
4
|
* Stores indices explicitly, suitable for irregular patterns and frequent modifications.
|
|
@@ -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;
|
|
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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { SelectionVector } from "./selectionVector";
|
|
2
2
|
import type BitVector from "../flat/bitVector";
|
|
3
3
|
import { SequenceSelectionVector } from "./sequenceSelectionVector";
|
|
4
4
|
export declare function createSelectionVector(size: number): SequenceSelectionVector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionVectorUtils.js","sourceRoot":"","sources":["../../../src/vector/filter/selectionVectorUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAC9C,OAAO,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAAY,EAAE,iBAA6B;IACrF,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,oFAAoF;QACpF,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,OAAO,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CACzC,eAAgC,EAChC,iBAA6B;IAE7B,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChD,oFAAoF;QACpF,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3D,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"selectionVectorUtils.js","sourceRoot":"","sources":["../../../src/vector/filter/selectionVectorUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAC9C,OAAO,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAAY,EAAE,iBAA6B;IACrF,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,oFAAoF;QACpF,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,OAAO,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CACzC,eAAgC,EAChC,iBAA6B;IAE7B,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChD,oFAAoF;QACpF,IAAI,CAAC,iBAAiB,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3D,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import type { SelectionVector } from \"./selectionVector\";\nimport { FlatSelectionVector } from \"./flatSelectionVector\";\nimport type BitVector from \"../flat/bitVector\";\nimport { SequenceSelectionVector } from \"./sequenceSelectionVector\";\n\nexport function createSelectionVector(size: number) {\n return new SequenceSelectionVector(0, 1, size);\n}\n\n/**\n * Creates a selection vector containing indices of non-null values.\n * @param size - The total number of elements to consider\n * @param nullabilityBuffer - Optional bit vector where 1=not null, 0=null. If undefined/null, all values are considered non-null.\n */\nexport function createNullableSelectionVector(size: number, nullabilityBuffer?: BitVector): SelectionVector {\n const selectionVector = [];\n for (let i = 0; i < size; i++) {\n // Include index if no nullability buffer (all non-null) OR if bit is set (non-null)\n if (!nullabilityBuffer || nullabilityBuffer.get(i)) {\n selectionVector.push(i);\n }\n }\n return new FlatSelectionVector(selectionVector);\n}\n\n/**\n * Filters an existing selection vector to include only non-null values.\n * @param selectionVector - The input selection vector to filter\n * @param nullabilityBuffer - Optional bit vector where 1=not null, 0=null. If undefined/null, all values are considered non-null.\n */\nexport function updateNullableSelectionVector(\n selectionVector: SelectionVector,\n nullabilityBuffer?: BitVector,\n): SelectionVector {\n const filteredIndices = [];\n for (let i = 0; i < selectionVector.limit; i++) {\n const vectorIndex = selectionVector.getIndex(i);\n // Include index if no nullability buffer (all non-null) OR if bit is set (non-null)\n if (!nullabilityBuffer || nullabilityBuffer.get(vectorIndex)) {\n filteredIndices.push(vectorIndex);\n }\n }\n return new FlatSelectionVector(filteredIndices);\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { SelectionVector } from "./selectionVector";
|
|
2
2
|
/**
|
|
3
3
|
* Memory-efficient SelectionVector for arithmetic sequences (base + index * delta).
|
|
4
4
|
* Calculates values on-demand, only materializes when modified.
|
|
@@ -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;
|
|
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"]}
|