@maplibre/mlt 1.1.1 → 1.1.4
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/decodingTestUtils.d.ts +75 -0
- package/dist/decoding/decodingTestUtils.js +285 -0
- package/dist/decoding/decodingTestUtils.js.map +1 -0
- package/dist/decoding/decodingUtils.d.ts +5 -8
- package/dist/decoding/decodingUtils.js +24 -51
- package/dist/decoding/decodingUtils.js.map +1 -1
- package/dist/decoding/decodingUtils.spec.js +85 -69
- package/dist/decoding/decodingUtils.spec.js.map +1 -1
- package/dist/decoding/fsstDecoder.spec.js +52 -35
- package/dist/decoding/fsstDecoder.spec.js.map +1 -1
- package/dist/decoding/geometryDecoder.js +49 -38
- package/dist/decoding/geometryDecoder.js.map +1 -1
- package/dist/decoding/integerDecodingUtils.d.ts +18 -31
- package/dist/decoding/integerDecodingUtils.js +134 -299
- package/dist/decoding/integerDecodingUtils.js.map +1 -1
- package/dist/decoding/integerDecodingUtils.spec.js +254 -148
- package/dist/decoding/integerDecodingUtils.spec.js.map +1 -1
- package/dist/decoding/integerStreamDecoder.d.ts +5 -7
- package/dist/decoding/integerStreamDecoder.js +104 -122
- package/dist/decoding/integerStreamDecoder.js.map +1 -1
- package/dist/decoding/integerStreamDecoder.spec.js +370 -113
- package/dist/decoding/integerStreamDecoder.spec.js.map +1 -1
- package/dist/decoding/propertyDecoder.js +23 -33
- package/dist/decoding/propertyDecoder.js.map +1 -1
- package/dist/decoding/propertyDecoder.spec.js +397 -605
- package/dist/decoding/propertyDecoder.spec.js.map +1 -1
- package/dist/decoding/stringDecoder.d.ts +2 -10
- package/dist/decoding/stringDecoder.js +146 -158
- package/dist/decoding/stringDecoder.js.map +1 -1
- package/dist/decoding/stringDecoder.spec.js +322 -321
- package/dist/decoding/stringDecoder.spec.js.map +1 -1
- package/dist/decoding/unpackNullableUtils.d.ts +25 -0
- package/dist/decoding/unpackNullableUtils.js +51 -0
- package/dist/decoding/unpackNullableUtils.js.map +1 -0
- package/dist/decoding/unpackNullableUtils.spec.js +71 -0
- package/dist/decoding/unpackNullableUtils.spec.js.map +1 -0
- package/dist/encoding/embeddedTilesetMetadataEncoder.d.ts +16 -0
- package/dist/encoding/embeddedTilesetMetadataEncoder.js +40 -0
- package/dist/encoding/embeddedTilesetMetadataEncoder.js.map +1 -0
- package/dist/encoding/encodingUtils.d.ts +7 -0
- package/dist/encoding/encodingUtils.js +107 -0
- package/dist/encoding/encodingUtils.js.map +1 -0
- package/dist/encoding/fsstEncoder.d.ts +21 -0
- package/dist/encoding/fsstEncoder.js +78 -0
- package/dist/encoding/fsstEncoder.js.map +1 -0
- package/dist/encoding/integerEncodingUtils.d.ts +68 -0
- package/dist/encoding/integerEncodingUtils.js +655 -0
- package/dist/encoding/integerEncodingUtils.js.map +1 -0
- package/dist/encoding/integerStreamEncoder.d.ts +27 -0
- package/dist/encoding/integerStreamEncoder.js +139 -0
- package/dist/encoding/integerStreamEncoder.js.map +1 -0
- package/dist/encoding/packNullableUtils.d.ts +4 -0
- package/dist/encoding/packNullableUtils.js +55 -0
- package/dist/encoding/packNullableUtils.js.map +1 -0
- package/dist/encoding/propertyEncoder.d.ts +78 -0
- package/dist/encoding/propertyEncoder.js +335 -0
- package/dist/encoding/propertyEncoder.js.map +1 -0
- package/dist/encoding/stringEncoder.d.ts +12 -0
- package/dist/encoding/stringEncoder.js +182 -0
- package/dist/encoding/stringEncoder.js.map +1 -0
- package/dist/encoding/zOrderCurveEncoder.d.ts +1 -0
- package/dist/encoding/zOrderCurveEncoder.js +10 -0
- package/dist/encoding/zOrderCurveEncoder.js.map +1 -0
- package/dist/metadata/tile/streamMetadataDecoder.d.ts +28 -4
- package/dist/metadata/tile/streamMetadataDecoder.js +81 -15
- package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.d.ts +5 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js +33 -45
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.d.ts +1 -0
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js +142 -0
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js.map +1 -0
- package/dist/metadata/tileset/typeMap.d.ts +21 -29
- package/dist/metadata/tileset/typeMap.js +167 -169
- package/dist/metadata/tileset/typeMap.js.map +1 -1
- package/dist/mltDecoder.js +12 -11
- package/dist/mltDecoder.js.map +1 -1
- package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -1
- package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
- package/dist/vector/flat/stringFlatVector.d.ts +1 -1
- package/dist/vector/flat/stringFlatVector.js.map +1 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js +2 -2
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js.map +1 -1
- package/dist/vector/geometry/constGpuVector.d.ts +2 -2
- package/dist/vector/geometry/constGpuVector.js.map +1 -1
- package/dist/vector/geometry/flatGpuVector.d.ts +2 -2
- package/dist/vector/geometry/flatGpuVector.js.map +1 -1
- package/dist/vector/geometry/geometryVector.js +2 -2
- package/dist/vector/geometry/geometryVector.js.map +1 -1
- package/dist/vector/geometry/geometryVectorConverter.js +4 -4
- package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
- package/dist/vector/geometry/gpuVector.d.ts +2 -2
- package/dist/vector/geometry/gpuVector.js.map +1 -1
- package/dist/vector/geometry/topologyVector.d.ts +4 -4
- package/dist/vector/geometry/topologyVector.js +0 -1
- package/dist/vector/geometry/topologyVector.js.map +1 -1
- package/dist/vector/geometry/zOrderCurve.d.ts +4 -17
- package/dist/vector/geometry/zOrderCurve.js +10 -35
- package/dist/vector/geometry/zOrderCurve.js.map +1 -1
- package/dist/vector/geometry/zOrderCurve.spec.js +21 -10
- package/dist/vector/geometry/zOrderCurve.spec.js.map +1 -1
- package/dist/vector/variableSizeVector.d.ts +2 -2
- package/dist/vector/variableSizeVector.js +0 -1
- package/dist/vector/variableSizeVector.js.map +1 -1
- package/package.json +6 -8
- package/dist/decoding/geometryDecoder.spec.js +0 -5
- package/dist/decoding/geometryDecoder.spec.js.map +0 -1
- package/dist/metadata/tile/mortonEncodedStreamMetadata.d.ts +0 -15
- package/dist/metadata/tile/mortonEncodedStreamMetadata.js +0 -27
- package/dist/metadata/tile/mortonEncodedStreamMetadata.js.map +0 -1
- package/dist/metadata/tile/rleEncodedStreamMetadata.d.ts +0 -24
- package/dist/metadata/tile/rleEncodedStreamMetadata.js +0 -38
- package/dist/metadata/tile/rleEncodedStreamMetadata.js.map +0 -1
- package/dist/metadata/tile/streamMetadata.d.ts +0 -29
- package/dist/metadata/tile/streamMetadata.js +0 -82
- package/dist/metadata/tile/streamMetadata.js.map +0 -1
- package/dist/vector/geometry/spaceFillingCurve.d.ts +0 -22
- package/dist/vector/geometry/spaceFillingCurve.js +0 -31
- package/dist/vector/geometry/spaceFillingCurve.js.map +0 -1
- /package/dist/decoding/{geometryDecoder.spec.d.ts → unpackNullableUtils.spec.d.ts} +0 -0
|
@@ -1,192 +1,180 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { decodeStreamMetadata } from "../metadata/tile/streamMetadataDecoder";
|
|
2
2
|
import { StringFlatVector } from "../vector/flat/stringFlatVector";
|
|
3
3
|
import { StringDictionaryVector } from "../vector/dictionary/stringDictionaryVector";
|
|
4
4
|
import BitVector from "../vector/flat/bitVector";
|
|
5
5
|
import { PhysicalStreamType } from "../metadata/tile/physicalStreamType";
|
|
6
6
|
import { DictionaryType } from "../metadata/tile/dictionaryType";
|
|
7
7
|
import { LengthType } from "../metadata/tile/lengthType";
|
|
8
|
-
import { decodeIntStream, decodeLengthStreamToOffsetBuffer
|
|
8
|
+
import { decodeIntStream, decodeLengthStreamToOffsetBuffer } from "./integerStreamDecoder";
|
|
9
9
|
import { ScalarType } from "../metadata/tileset/tilesetMetadata";
|
|
10
10
|
import { decodeVarintInt32 } from "./integerDecodingUtils";
|
|
11
11
|
import { decodeBooleanRle, skipColumn } from "./decodingUtils";
|
|
12
|
-
import { RleEncodedStreamMetadata } from "../metadata/tile/rleEncodedStreamMetadata";
|
|
13
12
|
import { StringFsstDictionaryVector } from "../vector/fsst-dictionary/stringFsstDictionaryVector";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
13
|
+
const ROOT_COLUMN_NAME = "default";
|
|
14
|
+
const NESTED_COLUMN_SEPARATOR = ":";
|
|
15
|
+
export function decodeString(name, data, offset, numStreams, bitVector) {
|
|
16
|
+
let dictionaryLengthStream = null;
|
|
17
|
+
let offsetStream = null;
|
|
18
|
+
let dictionaryStream = null;
|
|
19
|
+
let symbolLengthStream = null;
|
|
20
|
+
let symbolTableStream = null;
|
|
21
|
+
let presentStream = null;
|
|
22
|
+
let plainLengthStream = null;
|
|
23
|
+
let plainDataStream = null;
|
|
24
|
+
for (let i = 0; i < numStreams; i++) {
|
|
25
|
+
const streamMetadata = decodeStreamMetadata(data, offset);
|
|
26
|
+
if (streamMetadata.byteLength === 0) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
switch (streamMetadata.physicalStreamType) {
|
|
30
|
+
case PhysicalStreamType.PRESENT: {
|
|
31
|
+
const presentData = decodeBooleanRle(data, streamMetadata.numValues, streamMetadata.byteLength, offset);
|
|
32
|
+
presentStream = new BitVector(presentData, streamMetadata.numValues);
|
|
33
|
+
break;
|
|
31
34
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
case PhysicalStreamType.OFFSET: {
|
|
36
|
+
const isNullable = bitVector != null || presentStream != null;
|
|
37
|
+
const nullabilityBuffer = bitVector ?? presentStream;
|
|
38
|
+
offsetStream = decodeIntStream(data, offset, streamMetadata, false, undefined, isNullable ? nullabilityBuffer : undefined);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
case PhysicalStreamType.LENGTH: {
|
|
42
|
+
const ls = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
|
|
43
|
+
if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {
|
|
44
|
+
dictionaryLengthStream = ls;
|
|
45
|
+
}
|
|
46
|
+
else if (LengthType.SYMBOL === streamMetadata.logicalStreamType.lengthType) {
|
|
47
|
+
symbolLengthStream = ls;
|
|
37
48
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
else {
|
|
50
|
+
// Plain string encoding uses VAR_BINARY length type
|
|
51
|
+
plainLengthStream = ls;
|
|
52
|
+
}
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
case PhysicalStreamType.DATA: {
|
|
56
|
+
const ds = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
|
|
57
|
+
offset.add(streamMetadata.byteLength);
|
|
58
|
+
const dictType = streamMetadata.logicalStreamType.dictionaryType;
|
|
59
|
+
if (DictionaryType.FSST === dictType) {
|
|
60
|
+
symbolTableStream = ds;
|
|
45
61
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {
|
|
49
|
-
dictionaryLengthStream = ls;
|
|
50
|
-
}
|
|
51
|
-
else if (LengthType.SYMBOL === streamMetadata.logicalStreamType.lengthType) {
|
|
52
|
-
symbolLengthStream = ls;
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
// Plain string encoding uses VAR_BINARY length type
|
|
56
|
-
plainLengthStream = ls;
|
|
57
|
-
}
|
|
58
|
-
break;
|
|
62
|
+
else if (DictionaryType.SINGLE === dictType || DictionaryType.SHARED === dictType) {
|
|
63
|
+
dictionaryStream = ds;
|
|
59
64
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
offset.add(streamMetadata.byteLength);
|
|
63
|
-
const dictType = streamMetadata.logicalStreamType.dictionaryType;
|
|
64
|
-
if (DictionaryType.FSST === dictType) {
|
|
65
|
-
symbolTableStream = ds;
|
|
66
|
-
}
|
|
67
|
-
else if (DictionaryType.SINGLE === dictType || DictionaryType.SHARED === dictType) {
|
|
68
|
-
dictionaryStream = ds;
|
|
69
|
-
}
|
|
70
|
-
else if (DictionaryType.NONE === dictType) {
|
|
71
|
-
plainDataStream = ds;
|
|
72
|
-
}
|
|
73
|
-
break;
|
|
65
|
+
else if (DictionaryType.NONE === dictType) {
|
|
66
|
+
plainDataStream = ds;
|
|
74
67
|
}
|
|
68
|
+
break;
|
|
75
69
|
}
|
|
76
70
|
}
|
|
77
|
-
return (this.decodeFsstDictionaryVector(name, symbolTableStream, offsetStream, dictionaryLengthStream, dictionaryStream, symbolLengthStream, bitVector ?? presentStream) ??
|
|
78
|
-
this.decodeDictionaryVector(name, dictionaryStream, offsetStream, dictionaryLengthStream, bitVector ?? presentStream) ??
|
|
79
|
-
this.decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, bitVector ?? presentStream));
|
|
80
71
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
72
|
+
return (decodeFsstDictionaryVector(name, symbolTableStream, offsetStream, dictionaryLengthStream, dictionaryStream, symbolLengthStream, bitVector ?? presentStream) ??
|
|
73
|
+
decodeDictionaryVector(name, dictionaryStream, offsetStream, dictionaryLengthStream, bitVector ?? presentStream) ??
|
|
74
|
+
decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, bitVector ?? presentStream));
|
|
75
|
+
}
|
|
76
|
+
function decodeFsstDictionaryVector(name, symbolTableStream, offsetStream, dictionaryLengthStream, dictionaryStream, symbolLengthStream, nullabilityBuffer) {
|
|
77
|
+
if (!symbolTableStream) {
|
|
78
|
+
return null;
|
|
86
79
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
80
|
+
return new StringFsstDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream, symbolLengthStream, symbolTableStream, nullabilityBuffer);
|
|
81
|
+
}
|
|
82
|
+
function decodeDictionaryVector(name, dictionaryStream, offsetStream, dictionaryLengthStream, nullabilityBuffer) {
|
|
83
|
+
if (!dictionaryStream) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return nullabilityBuffer
|
|
87
|
+
? new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream, nullabilityBuffer)
|
|
88
|
+
: new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream);
|
|
89
|
+
}
|
|
90
|
+
function decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, nullabilityBuffer) {
|
|
91
|
+
if (!plainLengthStream || !plainDataStream) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
if (offsetStream) {
|
|
91
95
|
return nullabilityBuffer
|
|
92
|
-
? new StringDictionaryVector(name, offsetStream,
|
|
93
|
-
: new StringDictionaryVector(name, offsetStream,
|
|
96
|
+
? new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream, nullabilityBuffer)
|
|
97
|
+
: new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream);
|
|
94
98
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
if (nullabilityBuffer && nullabilityBuffer.size() !== plainLengthStream.length - 1) {
|
|
100
|
+
const sparseOffsetStream = new Int32Array(nullabilityBuffer.size());
|
|
101
|
+
let valueIndex = 0;
|
|
102
|
+
for (let i = 0; i < nullabilityBuffer.size(); i++) {
|
|
103
|
+
if (nullabilityBuffer.get(i)) {
|
|
104
|
+
sparseOffsetStream[i] = valueIndex++;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
sparseOffsetStream[i] = 0;
|
|
108
|
+
}
|
|
103
109
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
+
return new StringDictionaryVector(name, sparseOffsetStream, plainLengthStream, plainDataStream, nullabilityBuffer);
|
|
111
|
+
}
|
|
112
|
+
return nullabilityBuffer
|
|
113
|
+
? new StringFlatVector(name, plainLengthStream, plainDataStream, nullabilityBuffer)
|
|
114
|
+
: new StringFlatVector(name, plainLengthStream, plainDataStream);
|
|
115
|
+
}
|
|
116
|
+
export function decodeSharedDictionary(data, offset, column, numFeatures, propertyColumnNames) {
|
|
117
|
+
let dictionaryOffsetBuffer = null;
|
|
118
|
+
let dictionaryBuffer = null;
|
|
119
|
+
let symbolOffsetBuffer = null;
|
|
120
|
+
let symbolTableBuffer = null;
|
|
121
|
+
let dictionaryStreamDecoded = false;
|
|
122
|
+
while (!dictionaryStreamDecoded) {
|
|
123
|
+
const streamMetadata = decodeStreamMetadata(data, offset);
|
|
124
|
+
switch (streamMetadata.physicalStreamType) {
|
|
125
|
+
case PhysicalStreamType.LENGTH:
|
|
126
|
+
if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {
|
|
127
|
+
dictionaryOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
|
|
110
128
|
}
|
|
111
129
|
else {
|
|
112
|
-
|
|
130
|
+
symbolOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
|
|
113
131
|
}
|
|
114
|
-
|
|
115
|
-
|
|
132
|
+
break;
|
|
133
|
+
case PhysicalStreamType.DATA:
|
|
134
|
+
if (DictionaryType.SINGLE === streamMetadata.logicalStreamType.dictionaryType ||
|
|
135
|
+
DictionaryType.SHARED === streamMetadata.logicalStreamType.dictionaryType) {
|
|
136
|
+
dictionaryBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
|
|
137
|
+
dictionaryStreamDecoded = true;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
symbolTableBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
|
|
141
|
+
}
|
|
142
|
+
offset.add(streamMetadata.byteLength);
|
|
143
|
+
break;
|
|
116
144
|
}
|
|
117
|
-
return nullabilityBuffer
|
|
118
|
-
? new StringFlatVector(name, plainLengthStream, plainDataStream, nullabilityBuffer)
|
|
119
|
-
: new StringFlatVector(name, plainLengthStream, plainDataStream);
|
|
120
145
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
switch (streamMetadata.physicalStreamType) {
|
|
130
|
-
case PhysicalStreamType.LENGTH:
|
|
131
|
-
if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {
|
|
132
|
-
dictionaryOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
symbolOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);
|
|
136
|
-
}
|
|
137
|
-
break;
|
|
138
|
-
case PhysicalStreamType.DATA:
|
|
139
|
-
if (DictionaryType.SINGLE === streamMetadata.logicalStreamType.dictionaryType ||
|
|
140
|
-
DictionaryType.SHARED === streamMetadata.logicalStreamType.dictionaryType) {
|
|
141
|
-
dictionaryBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
|
|
142
|
-
dictionaryStreamDecoded = true;
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
symbolTableBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);
|
|
146
|
-
}
|
|
147
|
-
offset.add(streamMetadata.byteLength);
|
|
148
|
-
break;
|
|
149
|
-
}
|
|
146
|
+
const childFields = column.complexType.children;
|
|
147
|
+
const stringDictionaryVectors = [];
|
|
148
|
+
let i = 0;
|
|
149
|
+
for (const childField of childFields) {
|
|
150
|
+
const numStreams = decodeVarintInt32(data, offset, 1)[0];
|
|
151
|
+
if (numStreams == 0) {
|
|
152
|
+
/* Column is not present in the tile */
|
|
153
|
+
continue;
|
|
150
154
|
}
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if (numStreams == 0) {
|
|
157
|
-
/* Column is not present in the tile */
|
|
155
|
+
const columnName = `${column.name}${childField.name === ROOT_COLUMN_NAME ? "" : NESTED_COLUMN_SEPARATOR + childField.name}`;
|
|
156
|
+
if (propertyColumnNames) {
|
|
157
|
+
if (!propertyColumnNames.has(columnName)) {
|
|
158
|
+
//TODO: add size of sub column to Mlt for faster skipping
|
|
159
|
+
skipColumn(numStreams, data, offset);
|
|
158
160
|
continue;
|
|
159
161
|
}
|
|
160
|
-
const columnName = `${column.name}${childField.name === StringDecoder.ROOT_COLUMN_NAME
|
|
161
|
-
? ""
|
|
162
|
-
: StringDecoder.NESTED_COLUMN_SEPARATOR + childField.name}`;
|
|
163
|
-
if (propertyColumnNames) {
|
|
164
|
-
if (!propertyColumnNames.has(columnName)) {
|
|
165
|
-
//TODO: add size of sub column to Mlt for faster skipping
|
|
166
|
-
skipColumn(numStreams, data, offset);
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
if (numStreams !== 2 ||
|
|
171
|
-
childField.type !== "scalarField" ||
|
|
172
|
-
childField.scalarField.physicalType !== ScalarType.STRING) {
|
|
173
|
-
throw new Error("Currently only optional string fields are implemented for a struct.");
|
|
174
|
-
}
|
|
175
|
-
const presentStreamMetadata = StreamMetadataDecoder.decode(data, offset);
|
|
176
|
-
const presentStream = decodeBooleanRle(data, presentStreamMetadata.numValues, offset);
|
|
177
|
-
const offsetStreamMetadata = StreamMetadataDecoder.decode(data, offset);
|
|
178
|
-
const offsetCount = offsetStreamMetadata instanceof RleEncodedStreamMetadata
|
|
179
|
-
? offsetStreamMetadata.numRleValues
|
|
180
|
-
: offsetStreamMetadata.numValues;
|
|
181
|
-
const isNullable = offsetCount !== numFeatures;
|
|
182
|
-
const offsetStream = isNullable
|
|
183
|
-
? decodeNullableIntStream(data, offset, offsetStreamMetadata, false, new BitVector(presentStream, presentStreamMetadata.numValues))
|
|
184
|
-
: decodeIntStream(data, offset, offsetStreamMetadata, false);
|
|
185
|
-
stringDictionaryVectors[i++] = symbolTableBuffer
|
|
186
|
-
? new StringFsstDictionaryVector(columnName, offsetStream, dictionaryOffsetBuffer, dictionaryBuffer, symbolOffsetBuffer, symbolTableBuffer, new BitVector(presentStream, presentStreamMetadata.numValues))
|
|
187
|
-
: new StringDictionaryVector(columnName, offsetStream, dictionaryOffsetBuffer, dictionaryBuffer, new BitVector(presentStream, presentStreamMetadata.numValues));
|
|
188
162
|
}
|
|
189
|
-
|
|
163
|
+
if (numStreams !== 2 ||
|
|
164
|
+
childField.type !== "scalarField" ||
|
|
165
|
+
childField.scalarField.physicalType !== ScalarType.STRING) {
|
|
166
|
+
throw new Error("Currently only optional string fields are implemented for a struct.");
|
|
167
|
+
}
|
|
168
|
+
const presentStreamMetadata = decodeStreamMetadata(data, offset);
|
|
169
|
+
const presentStream = decodeBooleanRle(data, presentStreamMetadata.numValues, presentStreamMetadata.byteLength, offset);
|
|
170
|
+
const offsetStreamMetadata = decodeStreamMetadata(data, offset);
|
|
171
|
+
const offsetCount = offsetStreamMetadata.decompressedCount;
|
|
172
|
+
const isNullable = offsetCount !== numFeatures;
|
|
173
|
+
const offsetStream = decodeIntStream(data, offset, offsetStreamMetadata, false, undefined, isNullable ? new BitVector(presentStream, presentStreamMetadata.numValues) : undefined);
|
|
174
|
+
stringDictionaryVectors[i++] = symbolTableBuffer
|
|
175
|
+
? new StringFsstDictionaryVector(columnName, offsetStream, dictionaryOffsetBuffer, dictionaryBuffer, symbolOffsetBuffer, symbolTableBuffer, new BitVector(presentStream, presentStreamMetadata.numValues))
|
|
176
|
+
: new StringDictionaryVector(columnName, offsetStream, dictionaryOffsetBuffer, dictionaryBuffer, new BitVector(presentStream, presentStreamMetadata.numValues));
|
|
190
177
|
}
|
|
178
|
+
return stringDictionaryVectors;
|
|
191
179
|
}
|
|
192
180
|
//# sourceMappingURL=stringDecoder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringDecoder.js","sourceRoot":"","sources":["../../src/decoding/stringDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { StreamMetadataDecoder } from \"../metadata/tile/streamMetadataDecoder\";\nimport { StringFlatVector } from \"../vector/flat/stringFlatVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport type IntWrapper from \"./intWrapper\";\nimport BitVector from \"../vector/flat/bitVector\";\nimport type Vector from \"../vector/vector\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { decodeIntStream, decodeLengthStreamToOffsetBuffer, decodeNullableIntStream } from \"./integerStreamDecoder\";\nimport { type Column, ScalarType } from \"../metadata/tileset/tilesetMetadata\";\nimport { decodeVarintInt32 } from \"./integerDecodingUtils\";\nimport { decodeBooleanRle, skipColumn } from \"./decodingUtils\";\nimport { RleEncodedStreamMetadata } from \"../metadata/tile/rleEncodedStreamMetadata\";\nimport { StringFsstDictionaryVector } from \"../vector/fsst-dictionary/stringFsstDictionaryVector\";\n\nexport class StringDecoder {\n private static readonly ROOT_COLUMN_NAME = \"default\";\n private static readonly NESTED_COLUMN_SEPARATOR = \":\";\n\n private constructor() {}\n\n static decode(\n name: string,\n data: Uint8Array,\n offset: IntWrapper,\n numStreams: number,\n bitVector?: BitVector,\n ): Vector {\n let dictionaryLengthStream: Int32Array = null;\n let offsetStream: Int32Array = null;\n let dictionaryStream: Uint8Array = null;\n let symbolLengthStream: Int32Array = null;\n let symbolTableStream: Uint8Array = null;\n let presentStream: BitVector = null;\n let plainLengthStream: Int32Array = null;\n let plainDataStream: Uint8Array = null;\n\n for (let i = 0; i < numStreams; i++) {\n const streamMetadata = StreamMetadataDecoder.decode(data, offset);\n if (streamMetadata.byteLength === 0) {\n continue;\n }\n\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.PRESENT: {\n const presentData = decodeBooleanRle(data, streamMetadata.numValues, offset);\n presentStream = new BitVector(presentData, streamMetadata.numValues);\n break;\n }\n case PhysicalStreamType.OFFSET: {\n const isNullable = bitVector != null || presentStream != null;\n const nullabilityBuffer = bitVector ?? presentStream;\n offsetStream = isNullable\n ? decodeNullableIntStream(data, offset, streamMetadata, false, nullabilityBuffer)\n : decodeIntStream(data, offset, streamMetadata, false);\n break;\n }\n case PhysicalStreamType.LENGTH: {\n const ls = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryLengthStream = ls;\n } else if (LengthType.SYMBOL === streamMetadata.logicalStreamType.lengthType) {\n symbolLengthStream = ls;\n } else {\n // Plain string encoding uses VAR_BINARY length type\n plainLengthStream = ls;\n }\n break;\n }\n case PhysicalStreamType.DATA: {\n const ds = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n offset.add(streamMetadata.byteLength);\n const dictType = streamMetadata.logicalStreamType.dictionaryType;\n if (DictionaryType.FSST === dictType) {\n symbolTableStream = ds;\n } else if (DictionaryType.SINGLE === dictType || DictionaryType.SHARED === dictType) {\n dictionaryStream = ds;\n } else if (DictionaryType.NONE === dictType) {\n plainDataStream = ds;\n }\n break;\n }\n }\n }\n\n return (\n this.decodeFsstDictionaryVector(\n name,\n symbolTableStream,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n bitVector ?? presentStream,\n ) ??\n this.decodeDictionaryVector(\n name,\n dictionaryStream,\n offsetStream,\n dictionaryLengthStream,\n bitVector ?? presentStream,\n ) ??\n this.decodePlainStringVector(\n name,\n plainLengthStream,\n plainDataStream,\n offsetStream,\n bitVector ?? presentStream,\n )\n );\n }\n\n private static decodeFsstDictionaryVector(\n name: string,\n symbolTableStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Int32Array | null,\n dictionaryStream: Uint8Array | null,\n symbolLengthStream: Int32Array | null,\n nullabilityBuffer: BitVector | null,\n ): Vector | null {\n if (!symbolTableStream) {\n return null;\n }\n return new StringFsstDictionaryVector(\n name,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n symbolTableStream,\n nullabilityBuffer,\n );\n }\n\n private static decodeDictionaryVector(\n name: string,\n dictionaryStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Int32Array | null,\n nullabilityBuffer: BitVector | null,\n ): Vector | null {\n if (!dictionaryStream) {\n return null;\n }\n return nullabilityBuffer\n ? new StringDictionaryVector(\n name,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n nullabilityBuffer,\n )\n : new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream);\n }\n\n private static decodePlainStringVector(\n name: string,\n plainLengthStream: Int32Array | null,\n plainDataStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n nullabilityBuffer: BitVector | null,\n ): Vector | null {\n if (!plainLengthStream || !plainDataStream) {\n return null;\n }\n\n if (offsetStream) {\n return nullabilityBuffer\n ? new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream);\n }\n\n if (nullabilityBuffer && nullabilityBuffer.size() !== plainLengthStream.length - 1) {\n const sparseOffsetStream = new Int32Array(nullabilityBuffer.size());\n let valueIndex = 0;\n for (let i = 0; i < nullabilityBuffer.size(); i++) {\n if (nullabilityBuffer.get(i)) {\n sparseOffsetStream[i] = valueIndex++;\n } else {\n sparseOffsetStream[i] = 0;\n }\n }\n return new StringDictionaryVector(\n name,\n sparseOffsetStream,\n plainLengthStream,\n plainDataStream,\n nullabilityBuffer,\n );\n }\n\n return nullabilityBuffer\n ? new StringFlatVector(name, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringFlatVector(name, plainLengthStream, plainDataStream);\n }\n\n static decodeSharedDictionary(\n data: Uint8Array,\n offset: IntWrapper,\n column: Column,\n numFeatures: number,\n propertyColumnNames?: Set<string>,\n ): Vector[] {\n let dictionaryOffsetBuffer: Int32Array = null;\n let dictionaryBuffer: Uint8Array = null;\n let symbolOffsetBuffer: Int32Array = null;\n let symbolTableBuffer: Uint8Array = null;\n\n let dictionaryStreamDecoded = false;\n while (!dictionaryStreamDecoded) {\n const streamMetadata = StreamMetadataDecoder.decode(data, offset);\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n } else {\n symbolOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n }\n break;\n case PhysicalStreamType.DATA:\n if (\n DictionaryType.SINGLE === streamMetadata.logicalStreamType.dictionaryType ||\n DictionaryType.SHARED === streamMetadata.logicalStreamType.dictionaryType\n ) {\n dictionaryBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n dictionaryStreamDecoded = true;\n } else {\n symbolTableBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n }\n offset.add(streamMetadata.byteLength);\n break;\n }\n }\n\n const childFields = column.complexType.children;\n const stringDictionaryVectors = [];\n let i = 0;\n for (const childField of childFields) {\n const numStreams = decodeVarintInt32(data, offset, 1)[0];\n if (numStreams == 0) {\n /* Column is not present in the tile */\n continue;\n }\n\n const columnName = `${column.name}${\n childField.name === StringDecoder.ROOT_COLUMN_NAME\n ? \"\"\n : StringDecoder.NESTED_COLUMN_SEPARATOR + childField.name\n }`;\n if (propertyColumnNames) {\n if (!propertyColumnNames.has(columnName)) {\n //TODO: add size of sub column to Mlt for faster skipping\n skipColumn(numStreams, data, offset);\n continue;\n }\n }\n\n if (\n numStreams !== 2 ||\n childField.type !== \"scalarField\" ||\n childField.scalarField.physicalType !== ScalarType.STRING\n ) {\n throw new Error(\"Currently only optional string fields are implemented for a struct.\");\n }\n\n const presentStreamMetadata = StreamMetadataDecoder.decode(data, offset);\n const presentStream = decodeBooleanRle(data, presentStreamMetadata.numValues, offset);\n const offsetStreamMetadata = StreamMetadataDecoder.decode(data, offset);\n const offsetCount =\n offsetStreamMetadata instanceof RleEncodedStreamMetadata\n ? offsetStreamMetadata.numRleValues\n : offsetStreamMetadata.numValues;\n const isNullable = offsetCount !== numFeatures;\n const offsetStream = isNullable\n ? decodeNullableIntStream(\n data,\n offset,\n offsetStreamMetadata,\n false,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n )\n : decodeIntStream(data, offset, offsetStreamMetadata, false);\n\n stringDictionaryVectors[i++] = symbolTableBuffer\n ? new StringFsstDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n symbolOffsetBuffer,\n symbolTableBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n )\n : new StringDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n );\n }\n\n return stringDictionaryVectors;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"stringDecoder.js","sourceRoot":"","sources":["../../src/decoding/stringDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { decodeStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport { StringFlatVector } from \"../vector/flat/stringFlatVector\";\nimport { StringDictionaryVector } from \"../vector/dictionary/stringDictionaryVector\";\nimport type IntWrapper from \"./intWrapper\";\nimport BitVector from \"../vector/flat/bitVector\";\nimport type Vector from \"../vector/vector\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { decodeIntStream, decodeLengthStreamToOffsetBuffer } from \"./integerStreamDecoder\";\nimport { type Column, ScalarType } from \"../metadata/tileset/tilesetMetadata\";\nimport { decodeVarintInt32 } from \"./integerDecodingUtils\";\nimport { decodeBooleanRle, skipColumn } from \"./decodingUtils\";\nimport { StringFsstDictionaryVector } from \"../vector/fsst-dictionary/stringFsstDictionaryVector\";\n\nconst ROOT_COLUMN_NAME = \"default\";\nconst NESTED_COLUMN_SEPARATOR = \":\";\n\nexport function decodeString(\n name: string,\n data: Uint8Array,\n offset: IntWrapper,\n numStreams: number,\n bitVector?: BitVector,\n): Vector {\n let dictionaryLengthStream: Uint32Array = null;\n let offsetStream: Int32Array = null;\n let dictionaryStream: Uint8Array = null;\n let symbolLengthStream: Uint32Array = null;\n let symbolTableStream: Uint8Array = null;\n let presentStream: BitVector = null;\n let plainLengthStream: Uint32Array = null;\n let plainDataStream: Uint8Array = null;\n\n for (let i = 0; i < numStreams; i++) {\n const streamMetadata = decodeStreamMetadata(data, offset);\n if (streamMetadata.byteLength === 0) {\n continue;\n }\n\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.PRESENT: {\n const presentData = decodeBooleanRle(data, streamMetadata.numValues, streamMetadata.byteLength, offset);\n presentStream = new BitVector(presentData, streamMetadata.numValues);\n break;\n }\n case PhysicalStreamType.OFFSET: {\n const isNullable = bitVector != null || presentStream != null;\n const nullabilityBuffer = bitVector ?? presentStream;\n offsetStream = decodeIntStream(\n data,\n offset,\n streamMetadata,\n false,\n undefined,\n isNullable ? nullabilityBuffer : undefined,\n );\n break;\n }\n case PhysicalStreamType.LENGTH: {\n const ls = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryLengthStream = ls;\n } else if (LengthType.SYMBOL === streamMetadata.logicalStreamType.lengthType) {\n symbolLengthStream = ls;\n } else {\n // Plain string encoding uses VAR_BINARY length type\n plainLengthStream = ls;\n }\n break;\n }\n case PhysicalStreamType.DATA: {\n const ds = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n offset.add(streamMetadata.byteLength);\n const dictType = streamMetadata.logicalStreamType.dictionaryType;\n if (DictionaryType.FSST === dictType) {\n symbolTableStream = ds;\n } else if (DictionaryType.SINGLE === dictType || DictionaryType.SHARED === dictType) {\n dictionaryStream = ds;\n } else if (DictionaryType.NONE === dictType) {\n plainDataStream = ds;\n }\n break;\n }\n }\n }\n\n return (\n decodeFsstDictionaryVector(\n name,\n symbolTableStream,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n bitVector ?? presentStream,\n ) ??\n decodeDictionaryVector(\n name,\n dictionaryStream,\n offsetStream,\n dictionaryLengthStream,\n bitVector ?? presentStream,\n ) ??\n decodePlainStringVector(name, plainLengthStream, plainDataStream, offsetStream, bitVector ?? presentStream)\n );\n}\n\nfunction decodeFsstDictionaryVector(\n name: string,\n symbolTableStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Uint32Array | null,\n dictionaryStream: Uint8Array | null,\n symbolLengthStream: Uint32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!symbolTableStream) {\n return null;\n }\n return new StringFsstDictionaryVector(\n name,\n offsetStream,\n dictionaryLengthStream,\n dictionaryStream,\n symbolLengthStream,\n symbolTableStream,\n nullabilityBuffer,\n );\n}\n\nfunction decodeDictionaryVector(\n name: string,\n dictionaryStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n dictionaryLengthStream: Uint32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!dictionaryStream) {\n return null;\n }\n return nullabilityBuffer\n ? new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream, nullabilityBuffer)\n : new StringDictionaryVector(name, offsetStream, dictionaryLengthStream, dictionaryStream);\n}\n\nfunction decodePlainStringVector(\n name: string,\n plainLengthStream: Uint32Array | null,\n plainDataStream: Uint8Array | null,\n offsetStream: Int32Array | null,\n nullabilityBuffer: BitVector | null,\n): Vector | null {\n if (!plainLengthStream || !plainDataStream) {\n return null;\n }\n\n if (offsetStream) {\n return nullabilityBuffer\n ? new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringDictionaryVector(name, offsetStream, plainLengthStream, plainDataStream);\n }\n\n if (nullabilityBuffer && nullabilityBuffer.size() !== plainLengthStream.length - 1) {\n const sparseOffsetStream = new Int32Array(nullabilityBuffer.size());\n let valueIndex = 0;\n for (let i = 0; i < nullabilityBuffer.size(); i++) {\n if (nullabilityBuffer.get(i)) {\n sparseOffsetStream[i] = valueIndex++;\n } else {\n sparseOffsetStream[i] = 0;\n }\n }\n return new StringDictionaryVector(\n name,\n sparseOffsetStream,\n plainLengthStream,\n plainDataStream,\n nullabilityBuffer,\n );\n }\n\n return nullabilityBuffer\n ? new StringFlatVector(name, plainLengthStream, plainDataStream, nullabilityBuffer)\n : new StringFlatVector(name, plainLengthStream, plainDataStream);\n}\n\nexport function decodeSharedDictionary(\n data: Uint8Array,\n offset: IntWrapper,\n column: Column,\n numFeatures: number,\n propertyColumnNames?: Set<string>,\n): Vector[] {\n let dictionaryOffsetBuffer: Uint32Array = null;\n let dictionaryBuffer: Uint8Array = null;\n let symbolOffsetBuffer: Uint32Array = null;\n let symbolTableBuffer: Uint8Array = null;\n\n let dictionaryStreamDecoded = false;\n while (!dictionaryStreamDecoded) {\n const streamMetadata = decodeStreamMetadata(data, offset);\n switch (streamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n if (LengthType.DICTIONARY === streamMetadata.logicalStreamType.lengthType) {\n dictionaryOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n } else {\n symbolOffsetBuffer = decodeLengthStreamToOffsetBuffer(data, offset, streamMetadata);\n }\n break;\n case PhysicalStreamType.DATA:\n if (\n DictionaryType.SINGLE === streamMetadata.logicalStreamType.dictionaryType ||\n DictionaryType.SHARED === streamMetadata.logicalStreamType.dictionaryType\n ) {\n dictionaryBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n dictionaryStreamDecoded = true;\n } else {\n symbolTableBuffer = data.subarray(offset.get(), offset.get() + streamMetadata.byteLength);\n }\n offset.add(streamMetadata.byteLength);\n break;\n }\n }\n\n const childFields = column.complexType.children;\n const stringDictionaryVectors = [];\n let i = 0;\n for (const childField of childFields) {\n const numStreams = decodeVarintInt32(data, offset, 1)[0];\n if (numStreams == 0) {\n /* Column is not present in the tile */\n continue;\n }\n\n const columnName = `${column.name}${\n childField.name === ROOT_COLUMN_NAME ? \"\" : NESTED_COLUMN_SEPARATOR + childField.name\n }`;\n if (propertyColumnNames) {\n if (!propertyColumnNames.has(columnName)) {\n //TODO: add size of sub column to Mlt for faster skipping\n skipColumn(numStreams, data, offset);\n continue;\n }\n }\n\n if (\n numStreams !== 2 ||\n childField.type !== \"scalarField\" ||\n childField.scalarField.physicalType !== ScalarType.STRING\n ) {\n throw new Error(\"Currently only optional string fields are implemented for a struct.\");\n }\n\n const presentStreamMetadata = decodeStreamMetadata(data, offset);\n const presentStream = decodeBooleanRle(data, presentStreamMetadata.numValues, presentStreamMetadata.byteLength, offset);\n const offsetStreamMetadata = decodeStreamMetadata(data, offset);\n const offsetCount = offsetStreamMetadata.decompressedCount;\n const isNullable = offsetCount !== numFeatures;\n const offsetStream = decodeIntStream(\n data,\n offset,\n offsetStreamMetadata,\n false,\n undefined,\n isNullable ? new BitVector(presentStream, presentStreamMetadata.numValues) : undefined,\n );\n\n stringDictionaryVectors[i++] = symbolTableBuffer\n ? new StringFsstDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n symbolOffsetBuffer,\n symbolTableBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n )\n : new StringDictionaryVector(\n columnName,\n offsetStream,\n dictionaryOffsetBuffer,\n dictionaryBuffer,\n new BitVector(presentStream, presentStreamMetadata.numValues),\n );\n }\n\n return stringDictionaryVectors;\n}\n"]}
|