@maplibre/mlt 1.1.7 → 1.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/decoding/bigEndianDecode.d.ts +1 -1
  2. package/dist/decoding/bigEndianDecode.js.map +1 -1
  3. package/dist/decoding/decodingTestUtils.d.ts +2 -2
  4. package/dist/decoding/decodingTestUtils.js +20 -21
  5. package/dist/decoding/decodingTestUtils.js.map +1 -1
  6. package/dist/decoding/fastPforDecoder.d.ts +5 -6
  7. package/dist/decoding/fastPforDecoder.js +6 -6
  8. package/dist/decoding/fastPforDecoder.js.map +1 -1
  9. package/dist/decoding/fastPforShared.d.ts +0 -2
  10. package/dist/decoding/fastPforShared.js.map +1 -1
  11. package/dist/decoding/fastPforUnpack.d.ts +23 -23
  12. package/dist/decoding/fastPforUnpack.js.map +1 -1
  13. package/dist/decoding/geometryDecoder.js +41 -41
  14. package/dist/decoding/geometryDecoder.js.map +1 -1
  15. package/dist/decoding/intWrapper.js +0 -1
  16. package/dist/decoding/intWrapper.js.map +1 -1
  17. package/dist/decoding/integerDecodingUtils.d.ts +21 -17
  18. package/dist/decoding/integerDecodingUtils.js +71 -30
  19. package/dist/decoding/integerDecodingUtils.js.map +1 -1
  20. package/dist/decoding/integerStreamDecoder.d.ts +14 -10
  21. package/dist/decoding/integerStreamDecoder.js +150 -63
  22. package/dist/decoding/integerStreamDecoder.js.map +1 -1
  23. package/dist/decoding/propertyDecoder.js +32 -26
  24. package/dist/decoding/propertyDecoder.js.map +1 -1
  25. package/dist/decoding/stringDecoder.js +18 -19
  26. package/dist/decoding/stringDecoder.js.map +1 -1
  27. package/dist/decoding/unpackNullableUtils.d.ts +2 -2
  28. package/dist/decoding/unpackNullableUtils.js.map +1 -1
  29. package/dist/encoding/bigEndianEncode.d.ts +1 -1
  30. package/dist/encoding/bigEndianEncode.js.map +1 -1
  31. package/dist/encoding/constGeometryVectorEncoder.js +9 -9
  32. package/dist/encoding/constGeometryVectorEncoder.js.map +1 -1
  33. package/dist/encoding/encodingUtils.d.ts +1 -1
  34. package/dist/encoding/encodingUtils.js +1 -1
  35. package/dist/encoding/encodingUtils.js.map +1 -1
  36. package/dist/encoding/fastPforEncoder.d.ts +4 -5
  37. package/dist/encoding/fastPforEncoder.js +4 -4
  38. package/dist/encoding/fastPforEncoder.js.map +1 -1
  39. package/dist/encoding/integerEncodingUtils.d.ts +14 -14
  40. package/dist/encoding/integerEncodingUtils.js +39 -31
  41. package/dist/encoding/integerEncodingUtils.js.map +1 -1
  42. package/dist/encoding/integerStreamEncoder.d.ts +2 -1
  43. package/dist/encoding/integerStreamEncoder.js +52 -18
  44. package/dist/encoding/integerStreamEncoder.js.map +1 -1
  45. package/dist/encoding/propertyEncoder.js +9 -16
  46. package/dist/encoding/propertyEncoder.js.map +1 -1
  47. package/dist/encoding/stringEncoder.js +9 -42
  48. package/dist/encoding/stringEncoder.js.map +1 -1
  49. package/dist/metadata/tile/logicalStreamType.d.ts +5 -9
  50. package/dist/metadata/tile/logicalStreamType.js +1 -19
  51. package/dist/metadata/tile/logicalStreamType.js.map +1 -1
  52. package/dist/metadata/tile/streamMetadataDecoder.d.ts +1 -1
  53. package/dist/metadata/tile/streamMetadataDecoder.js +9 -4
  54. package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
  55. package/dist/mltDecoder.js +25 -29
  56. package/dist/mltDecoder.js.map +1 -1
  57. package/dist/vector/constant/{intConstVector.d.ts → int32ConstVector.d.ts} +2 -2
  58. package/dist/vector/constant/int32ConstVector.js +10 -0
  59. package/dist/vector/constant/int32ConstVector.js.map +1 -0
  60. package/dist/vector/constant/{longConstVector.d.ts → int64ConstVector.d.ts} +2 -2
  61. package/dist/vector/constant/int64ConstVector.js +10 -0
  62. package/dist/vector/constant/int64ConstVector.js.map +1 -0
  63. package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -1
  64. package/dist/vector/dictionary/stringDictionaryVector.js +0 -1
  65. package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
  66. package/dist/vector/featureTable.d.ts +4 -4
  67. package/dist/vector/featureTable.js +9 -14
  68. package/dist/vector/featureTable.js.map +1 -1
  69. package/dist/vector/filter/flatSelectionVector.js +0 -2
  70. package/dist/vector/filter/flatSelectionVector.js.map +1 -1
  71. package/dist/vector/filter/sequenceSelectionVector.js +1 -5
  72. package/dist/vector/filter/sequenceSelectionVector.js.map +1 -1
  73. package/dist/vector/flat/bitVector.js +0 -2
  74. package/dist/vector/flat/bitVector.js.map +1 -1
  75. package/dist/vector/flat/booleanFlatVector.js +0 -1
  76. package/dist/vector/flat/booleanFlatVector.js.map +1 -1
  77. package/dist/vector/flat/{intFlatVector.d.ts → int32FlatVector.d.ts} +1 -1
  78. package/dist/vector/flat/{intFlatVector.js → int32FlatVector.js} +2 -2
  79. package/dist/vector/flat/int32FlatVector.js.map +1 -0
  80. package/dist/vector/flat/{longFlatVector.d.ts → int64FlatVector.d.ts} +1 -1
  81. package/dist/vector/flat/{longFlatVector.js → int64FlatVector.js} +2 -2
  82. package/dist/vector/flat/int64FlatVector.js.map +1 -0
  83. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -1
  84. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +0 -6
  85. package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
  86. package/dist/vector/geometry/constGeometryVector.d.ts +3 -3
  87. package/dist/vector/geometry/constGeometryVector.js +0 -2
  88. package/dist/vector/geometry/constGeometryVector.js.map +1 -1
  89. package/dist/vector/geometry/constGpuVector.d.ts +2 -2
  90. package/dist/vector/geometry/constGpuVector.js +0 -2
  91. package/dist/vector/geometry/constGpuVector.js.map +1 -1
  92. package/dist/vector/geometry/flatGeometryVector.d.ts +3 -3
  93. package/dist/vector/geometry/flatGeometryVector.js +1 -5
  94. package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
  95. package/dist/vector/geometry/flatGpuVector.d.ts +2 -2
  96. package/dist/vector/geometry/flatGpuVector.js +0 -1
  97. package/dist/vector/geometry/flatGpuVector.js.map +1 -1
  98. package/dist/vector/geometry/geometryVector.d.ts +3 -3
  99. package/dist/vector/geometry/geometryVector.js +0 -5
  100. package/dist/vector/geometry/geometryVector.js.map +1 -1
  101. package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
  102. package/dist/vector/geometry/gpuVector.d.ts +4 -4
  103. package/dist/vector/geometry/gpuVector.js +0 -4
  104. package/dist/vector/geometry/gpuVector.js.map +1 -1
  105. package/dist/vector/geometry/topologyVector.d.ts +3 -3
  106. package/dist/vector/geometry/topologyVector.js.map +1 -1
  107. package/dist/vector/idVector.d.ts +8 -0
  108. package/dist/vector/idVector.js +2 -0
  109. package/dist/vector/idVector.js.map +1 -0
  110. package/dist/vector/sequence/{intSequenceVector.d.ts → int32SequenceVector.d.ts} +1 -1
  111. package/dist/vector/sequence/{intSequenceVector.js → int32SequenceVector.js} +2 -2
  112. package/dist/vector/sequence/int32SequenceVector.js.map +1 -0
  113. package/dist/vector/sequence/{longSequenceVector.d.ts → int64SequenceVector.d.ts} +1 -1
  114. package/dist/vector/sequence/{longSequenceVector.js → int64SequenceVector.js} +2 -2
  115. package/dist/vector/sequence/int64SequenceVector.js.map +1 -0
  116. package/dist/vector/sequence/sequenceVector.js +0 -1
  117. package/dist/vector/sequence/sequenceVector.js.map +1 -1
  118. package/dist/vector/variableSizeVector.js +0 -1
  119. package/dist/vector/variableSizeVector.js.map +1 -1
  120. package/dist/vector/vector.js +0 -4
  121. package/dist/vector/vector.js.map +1 -1
  122. package/package.json +6 -6
  123. package/dist/vector/constant/intConstVector.js +0 -10
  124. package/dist/vector/constant/intConstVector.js.map +0 -1
  125. package/dist/vector/constant/longConstVector.js +0 -10
  126. package/dist/vector/constant/longConstVector.js.map +0 -1
  127. package/dist/vector/flat/intFlatVector.js.map +0 -1
  128. package/dist/vector/flat/longFlatVector.js.map +0 -1
  129. package/dist/vector/intVector.d.ts +0 -8
  130. package/dist/vector/intVector.js +0 -2
  131. package/dist/vector/intVector.js.map +0 -1
  132. package/dist/vector/sequence/intSequenceVector.js.map +0 -1
  133. package/dist/vector/sequence/longSequenceVector.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { decodeStreamMetadata } from "../metadata/tile/streamMetadataDecoder";
2
- import { decodeConstIntStream, decodeIntStream, decodeLengthStreamToOffsetBuffer, getVectorType, } from "./integerStreamDecoder";
2
+ import { decodeSignedInt32Stream, decodeLengthStreamToOffsetBuffer, decodeUnsignedConstInt32Stream, decodeUnsignedInt32Stream, getVectorType, } from "./integerStreamDecoder";
3
3
  import { VectorType } from "../vector/vectorType";
4
4
  import { PhysicalStreamType } from "../metadata/tile/physicalStreamType";
5
5
  import { LengthType } from "../metadata/tile/lengthType";
@@ -13,20 +13,20 @@ import { createFlatGpuVector } from "../vector/geometry/flatGpuVector";
13
13
  export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scalingData) {
14
14
  const geometryTypeMetadata = decodeStreamMetadata(tile, offset);
15
15
  const geometryTypesVectorType = getVectorType(geometryTypeMetadata, numFeatures, tile, offset);
16
- let vertexOffsets = null;
17
- let vertexBuffer = null;
18
- let mortonSettings = null;
19
- let indexBuffer = null;
16
+ let vertexOffsets;
17
+ let vertexBuffer;
18
+ let mortonSettings;
19
+ let indexBuffer;
20
20
  if (geometryTypesVectorType === VectorType.CONST) {
21
- /* All geometries in the colum have the same geometry type */
22
- const geometryType = decodeConstIntStream(tile, offset, geometryTypeMetadata, false);
21
+ /* All geometries in the column have the same geometry type */
22
+ const geometryType = decodeUnsignedConstInt32Stream(tile, offset, geometryTypeMetadata);
23
23
  // Variables for const geometry path (directly decoded as offsets)
24
- let geometryOffsets = null;
25
- let partOffsets = null;
26
- let ringOffsets = null;
24
+ let geometryOffsets;
25
+ let partOffsets;
26
+ let ringOffsets;
27
27
  //TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons
28
28
  // in one FeatureTable?
29
- let triangleOffsets = null;
29
+ let triangleOffsets;
30
30
  for (let i = 0; i < numStreams - 1; i++) {
31
31
  const geometryStreamMetadata = decodeStreamMetadata(tile, offset);
32
32
  switch (geometryStreamMetadata.physicalStreamType) {
@@ -48,17 +48,17 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
48
48
  case PhysicalStreamType.OFFSET: {
49
49
  switch (geometryStreamMetadata.logicalStreamType.offsetType) {
50
50
  case OffsetType.VERTEX:
51
- vertexOffsets = decodeIntStream(tile, offset, geometryStreamMetadata, false);
51
+ vertexOffsets = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
52
52
  break;
53
53
  case OffsetType.INDEX:
54
- indexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false);
54
+ indexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
55
55
  break;
56
56
  }
57
57
  break;
58
58
  }
59
59
  case PhysicalStreamType.DATA: {
60
60
  if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {
61
- vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, true, scalingData);
61
+ vertexBuffer = decodeSignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);
62
62
  }
63
63
  else {
64
64
  const mortonMetadata = geometryStreamMetadata;
@@ -66,14 +66,14 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
66
66
  numBits: mortonMetadata.numBits,
67
67
  coordinateShift: mortonMetadata.coordinateShift,
68
68
  };
69
- vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false, scalingData);
69
+ vertexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);
70
70
  }
71
71
  break;
72
72
  }
73
73
  }
74
74
  }
75
- if (indexBuffer !== null) {
76
- if (geometryOffsets != null || partOffsets != null) {
75
+ if (indexBuffer) {
76
+ if (geometryOffsets !== undefined || partOffsets !== undefined) {
77
77
  /* Case when the indices of a Polygon outline are encoded in the tile */
78
78
  const topologyVector = { geometryOffsets, partOffsets, ringOffsets };
79
79
  return createConstGpuVector(numFeatures, geometryType, triangleOffsets, indexBuffer, vertexBuffer, topologyVector);
@@ -81,33 +81,33 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
81
81
  /* Case when the no Polygon outlines are encoded in the tile */
82
82
  return createConstGpuVector(numFeatures, geometryType, triangleOffsets, indexBuffer, vertexBuffer);
83
83
  }
84
- return mortonSettings === null
84
+ return mortonSettings === undefined
85
85
  ? /* Currently only 2D coordinates (Vec2) are implemented in the encoder */
86
86
  createConstGeometryVector(numFeatures, geometryType, { geometryOffsets, partOffsets, ringOffsets }, vertexOffsets, vertexBuffer)
87
87
  : createMortonEncodedConstGeometryVector(numFeatures, geometryType, { geometryOffsets, partOffsets, ringOffsets }, vertexOffsets, vertexBuffer, mortonSettings);
88
88
  }
89
89
  /* Different geometry types are mixed in the geometry column */
90
- const geometryTypeVector = decodeIntStream(tile, offset, geometryTypeMetadata, false);
90
+ const geometryTypeVector = decodeUnsignedInt32Stream(tile, offset, geometryTypeMetadata);
91
91
  // Variables for flat geometry path (decoded as lengths, then converted to offsets)
92
- let geometryLengths = null;
93
- let partLengths = null;
94
- let ringLengths = null;
92
+ let geometryLengths;
93
+ let partLengths;
94
+ let ringLengths;
95
95
  //TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons
96
96
  // in one FeatureTable?
97
- let triangleOffsets = null;
97
+ let triangleOffsets;
98
98
  for (let i = 0; i < numStreams - 1; i++) {
99
99
  const geometryStreamMetadata = decodeStreamMetadata(tile, offset);
100
100
  switch (geometryStreamMetadata.physicalStreamType) {
101
101
  case PhysicalStreamType.LENGTH:
102
102
  switch (geometryStreamMetadata.logicalStreamType.lengthType) {
103
103
  case LengthType.GEOMETRIES:
104
- geometryLengths = decodeIntStream(tile, offset, geometryStreamMetadata, false);
104
+ geometryLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
105
105
  break;
106
106
  case LengthType.PARTS:
107
- partLengths = decodeIntStream(tile, offset, geometryStreamMetadata, false);
107
+ partLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
108
108
  break;
109
109
  case LengthType.RINGS:
110
- ringLengths = decodeIntStream(tile, offset, geometryStreamMetadata, false);
110
+ ringLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
111
111
  break;
112
112
  case LengthType.TRIANGLES:
113
113
  triangleOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);
@@ -116,16 +116,16 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
116
116
  case PhysicalStreamType.OFFSET:
117
117
  switch (geometryStreamMetadata.logicalStreamType.offsetType) {
118
118
  case OffsetType.VERTEX:
119
- vertexOffsets = decodeIntStream(tile, offset, geometryStreamMetadata, false);
119
+ vertexOffsets = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
120
120
  break;
121
121
  case OffsetType.INDEX:
122
- indexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false);
122
+ indexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);
123
123
  break;
124
124
  }
125
125
  break;
126
126
  case PhysicalStreamType.DATA:
127
127
  if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {
128
- vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, true, scalingData);
128
+ vertexBuffer = decodeSignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);
129
129
  }
130
130
  else {
131
131
  const mortonMetadata = geometryStreamMetadata;
@@ -133,39 +133,39 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
133
133
  numBits: mortonMetadata.numBits,
134
134
  coordinateShift: mortonMetadata.coordinateShift,
135
135
  };
136
- vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false, scalingData);
136
+ vertexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);
137
137
  }
138
138
  break;
139
139
  }
140
140
  }
141
141
  // TODO: refactor the following instructions -> decode in one pass for performance reasons
142
142
  /* Calculate the offsets from the length buffer for util access */
143
- let geometryOffsets = null;
144
- let partOffsets = null;
145
- let ringOffsets = null;
146
- if (geometryLengths !== null) {
143
+ let geometryOffsets;
144
+ let partOffsets;
145
+ let ringOffsets;
146
+ if (geometryLengths) {
147
147
  geometryOffsets = decodeRootLengthStream(geometryTypeVector, geometryLengths, 2);
148
- if (partLengths !== null && ringLengths !== null) {
148
+ if (partLengths && ringLengths) {
149
149
  partOffsets = decodeLevel1LengthStream(geometryTypeVector, geometryOffsets, partLengths, false);
150
150
  ringOffsets = decodeLevel2LengthStream(geometryTypeVector, geometryOffsets, partOffsets, ringLengths);
151
151
  }
152
- else if (partLengths !== null) {
152
+ else if (partLengths) {
153
153
  partOffsets = decodeLevel1WithoutRingBufferLengthStream(geometryTypeVector, geometryOffsets, partLengths);
154
154
  }
155
155
  }
156
- else if (partLengths !== null && ringLengths !== null) {
156
+ else if (partLengths && ringLengths) {
157
157
  partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 1);
158
158
  ringOffsets = decodeLevel1LengthStream(geometryTypeVector, partOffsets, ringLengths, true);
159
159
  }
160
- else if (partLengths !== null) {
160
+ else if (partLengths) {
161
161
  partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 0);
162
162
  }
163
- if (indexBuffer !== null && partOffsets === null) {
163
+ if (indexBuffer && !partOffsets) {
164
164
  /* Case when the indices of a Polygon outline are not encoded in the data so no
165
165
  * topology data are present in the tile */
166
166
  return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer);
167
167
  }
168
- if (indexBuffer !== null) {
168
+ if (indexBuffer) {
169
169
  /* Case when the indices of a Polygon outline are encoded in the tile */
170
170
  return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer, {
171
171
  geometryOffsets,
@@ -173,7 +173,7 @@ export function decodeGeometryColumn(tile, numStreams, offset, numFeatures, scal
173
173
  ringOffsets,
174
174
  });
175
175
  }
176
- return mortonSettings === null /* Currently only 2D coordinates (Vec2) are implemented in the encoder */
176
+ return mortonSettings === undefined /* Currently only 2D coordinates (Vec2) are implemented in the encoder */
177
177
  ? createFlatGeometryVector(geometryTypeVector, { geometryOffsets, partOffsets, ringOffsets }, vertexOffsets, vertexBuffer)
178
178
  : createFlatGeometryVectorMortonEncoded(geometryTypeVector, { geometryOffsets, partOffsets, ringOffsets }, vertexOffsets, vertexBuffer, mortonSettings);
179
179
  }
@@ -1 +1 @@
1
- {"version":3,"file":"geometryDecoder.js","sourceRoot":"","sources":["../../src/decoding/geometryDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAoC,MAAM,wCAAwC,CAAC;AAEhH,OAAO,EACH,oBAAoB,EACpB,eAAe,EACf,gCAAgC,EAChC,aAAa,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EACH,yBAAyB,EACzB,sCAAsC,GACzC,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,qCAAqC,EAAE,MAAM,uCAAuC,CAAC;AACxH,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAKvE,yCAAyC;AACzC,MAAM,UAAU,oBAAoB,CAChC,IAAgB,EAChB,UAAkB,EAClB,MAAkB,EAClB,WAAmB,EACnB,WAA6B;IAE7B,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,uBAAuB,GAAG,aAAa,CAAC,oBAAoB,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAE/F,IAAI,aAAa,GAAe,IAAI,CAAC;IACrC,IAAI,YAAY,GAAe,IAAI,CAAC;IACpC,IAAI,cAAc,GAAmB,IAAI,CAAC;IAC1C,IAAI,WAAW,GAAe,IAAI,CAAC;IAEnC,IAAI,uBAAuB,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC;QAC/C,6DAA6D;QAC7D,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAErF,kEAAkE;QAClE,IAAI,eAAe,GAAgB,IAAI,CAAC;QACxC,IAAI,WAAW,GAAgB,IAAI,CAAC;QACpC,IAAI,WAAW,GAAgB,IAAI,CAAC;QACpC,yGAAyG;QACzG,uBAAuB;QACvB,IAAI,eAAe,GAAgB,IAAI,CAAC;QAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAClE,QAAQ,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;gBAChD,KAAK,kBAAkB,CAAC,MAAM;oBAC1B,QAAQ,sBAAsB,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;wBAC1D,KAAK,UAAU,CAAC,UAAU;4BACtB,eAAe,GAAG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;4BACzF,MAAM;wBACV,KAAK,UAAU,CAAC,KAAK;4BACjB,WAAW,GAAG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;4BACrF,MAAM;wBACV,KAAK,UAAU,CAAC,KAAK;4BACjB,WAAW,GAAG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;4BACrF,MAAM;wBACV,KAAK,UAAU,CAAC,SAAS;4BACrB,eAAe,GAAG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;oBACjG,CAAC;oBACD,MAAM;gBACV,KAAK,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC7B,QAAQ,sBAAsB,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;wBAC1D,KAAK,UAAU,CAAC,MAAM;4BAClB,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC;4BAC7E,MAAM;wBACV,KAAK,UAAU,CAAC,KAAK;4BACjB,WAAW,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC;4BAC3E,MAAM;oBACd,CAAC;oBACD,MAAM;gBACV,CAAC;gBACD,KAAK,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC3B,IAAI,cAAc,CAAC,MAAM,KAAK,sBAAsB,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC;wBACpF,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;oBAC5F,CAAC;yBAAM,CAAC;wBACJ,MAAM,cAAc,GAAG,sBAAqD,CAAC;wBAC7E,cAAc,GAAG;4BACb,OAAO,EAAE,cAAc,CAAC,OAAO;4BAC/B,eAAe,EAAE,cAAc,CAAC,eAAe;yBAClD,CAAC;wBACF,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;oBAC7F,CAAC;oBACD,MAAM;gBACV,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,eAAe,IAAI,IAAI,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACjD,wEAAwE;gBACxE,MAAM,cAAc,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;gBACrE,OAAO,oBAAoB,CACvB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,YAAY,EACZ,cAAc,CACjB,CAAC;YACN,CAAC;YAED,+DAA+D;YAC/D,OAAO,oBAAoB,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QACvG,CAAC;QAED,OAAO,cAAc,KAAK,IAAI;YAC1B,CAAC,CAAC,0EAA0E;gBAC1E,yBAAyB,CACrB,WAAW,EACX,YAAY,EACZ,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,EAC7C,aAAa,EACb,YAAY,CACf;YACH,CAAC,CAAC,sCAAsC,CAClC,WAAW,EACX,YAAY,EACZ,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,EAC7C,aAAa,EACb,YAAY,EACZ,cAAc,CACjB,CAAC;IACZ,CAAC;IAED,+DAA+D;IAC/D,MAAM,kBAAkB,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;IAEtF,mFAAmF;IACnF,IAAI,eAAe,GAAe,IAAI,CAAC;IACvC,IAAI,WAAW,GAAe,IAAI,CAAC;IACnC,IAAI,WAAW,GAAe,IAAI,CAAC;IACnC,yGAAyG;IACzG,uBAAuB;IACvB,IAAI,eAAe,GAAgB,IAAI,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClE,QAAQ,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;YAChD,KAAK,kBAAkB,CAAC,MAAM;gBAC1B,QAAQ,sBAAsB,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;oBAC1D,KAAK,UAAU,CAAC,UAAU;wBACtB,eAAe,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC;wBAC/E,MAAM;oBACV,KAAK,UAAU,CAAC,KAAK;wBACjB,WAAW,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC;wBAC3E,MAAM;oBACV,KAAK,UAAU,CAAC,KAAK;wBACjB,WAAW,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC;wBAC3E,MAAM;oBACV,KAAK,UAAU,CAAC,SAAS;wBACrB,eAAe,GAAG,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;gBACjG,CAAC;gBACD,MAAM;YACV,KAAK,kBAAkB,CAAC,MAAM;gBAC1B,QAAQ,sBAAsB,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;oBAC1D,KAAK,UAAU,CAAC,MAAM;wBAClB,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC;wBAC7E,MAAM;oBACV,KAAK,UAAU,CAAC,KAAK;wBACjB,WAAW,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC;wBAC3E,MAAM;gBACd,CAAC;gBACD,MAAM;YACV,KAAK,kBAAkB,CAAC,IAAI;gBACxB,IAAI,cAAc,CAAC,MAAM,KAAK,sBAAsB,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC;oBACpF,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC5F,CAAC;qBAAM,CAAC;oBACJ,MAAM,cAAc,GAAG,sBAAqD,CAAC;oBAC7E,cAAc,GAAG;wBACb,OAAO,EAAE,cAAc,CAAC,OAAO;wBAC/B,eAAe,EAAE,cAAc,CAAC,eAAe;qBAClD,CAAC;oBACF,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;gBAC7F,CAAC;gBACD,MAAM;QACd,CAAC;IACL,CAAC;IAED,0FAA0F;IAC1F,kEAAkE;IAClE,IAAI,eAAe,GAAgB,IAAI,CAAC;IACxC,IAAI,WAAW,GAAgB,IAAI,CAAC;IACpC,IAAI,WAAW,GAAgB,IAAI,CAAC;IAEpC,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC3B,eAAe,GAAG,sBAAsB,CAAC,kBAAkB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;QACjF,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YAC/C,WAAW,GAAG,wBAAwB,CAAC,kBAAkB,EAAE,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YAChG,WAAW,GAAG,wBAAwB,CAAC,kBAAkB,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAC1G,CAAC;aAAM,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,WAAW,GAAG,yCAAyC,CAAC,kBAAkB,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;QAC9G,CAAC;IACL,CAAC;SAAM,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACtD,WAAW,GAAG,sBAAsB,CAAC,kBAAkB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QACzE,WAAW,GAAG,wBAAwB,CAAC,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC/F,CAAC;SAAM,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QAC9B,WAAW,GAAG,sBAAsB,CAAC,kBAAkB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QAC/C;oDAC4C;QAC5C,OAAO,mBAAmB,CAAC,kBAAkB,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACvB,wEAAwE;QACxE,OAAO,mBAAmB,CAAC,kBAAkB,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE;YACvF,eAAe;YACf,WAAW;YACX,WAAW;SACd,CAAC,CAAC;IACP,CAAC;IAED,OAAO,cAAc,KAAK,IAAI,CAAC,0EAA0E;QACrG,CAAC,CAAC,wBAAwB,CACpB,kBAAkB,EAClB,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,EAC7C,aAAa,EACb,YAAY,CACf;QACH,CAAC,CAAC,qCAAqC,CACjC,kBAAkB,EAClB,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,EAC7C,aAAa,EACb,YAAY,EACZ,cAAc,CACjB,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAC3B,aAAyB,EACzB,gBAA0C,EAC1C,QAAgB;IAEhB,MAAM,iBAAiB,GAAG,IAAI,WAAW,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;IACtC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C;;;;aAIK;QACL,cAAc,GAAG,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC;YACrC,cAAc,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC7B,CAAC;AAED,SAAS,wBAAwB,CAC7B,aAAyB,EACzB,gBAA6B,EAC7B,kBAA8B,EAC9B,mBAA4B;IAE5B,MAAM,mBAAmB,GAAG,IAAI,WAAW,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,mBAAmB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;IACxC,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,yBAAyB,GAAG,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpE,IACI,YAAY,KAAK,CAAC;YAClB,YAAY,KAAK,CAAC;YAClB,CAAC,mBAAmB,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,CAAC,CAAC,EACrE,CAAC;YACC;0DAC8C;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,cAAc,GAAG,mBAAmB,CAAC,mBAAmB,EAAE,CAAC;oBACvD,cAAc,GAAG,kBAAkB,CAAC,yBAAyB,EAAE,CAAC,CAAC;YACzE,CAAC;QACL,CAAC;aAAM,CAAC;YACJ;2CAC+B;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,mBAAmB,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC;YAClE,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,yCAAyC,CAC9C,aAAyB,EACzB,gBAA6B,EAC7B,kBAA8B;IAE9B,MAAM,mBAAmB,GAAG,IAAI,WAAW,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,mBAAmB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;IACxC,IAAI,yBAAyB,GAAG,CAAC,CAAC;IAClC,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YAC3C,iFAAiF;YACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,cAAc,GAAG,mBAAmB,CAAC,yBAAyB,EAAE,CAAC;oBAC7D,cAAc,GAAG,kBAAkB,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACnE,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,oEAAoE;YACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,mBAAmB,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC;YACxE,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AAED,SAAS,wBAAwB,CAC7B,aAAyB,EACzB,gBAA6B,EAC7B,kBAA+B,EAC/B,kBAA8B;IAE9B,MAAM,mBAAmB,GAAG,IAAI,WAAW,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnG,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,mBAAmB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;IACxC,IAAI,yBAAyB,GAAG,CAAC,CAAC;IAClC,IAAI,yBAAyB,GAAG,CAAC,CAAC;IAClC,IAAI,yBAAyB,GAAG,CAAC,CAAC;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YAC3C;wBACY;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,QAAQ,GACV,kBAAkB,CAAC,yBAAyB,CAAC,GAAG,kBAAkB,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC;gBACtG,yBAAyB,EAAE,CAAC;gBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChC,cAAc,GAAG,mBAAmB,CAAC,yBAAyB,EAAE,CAAC;wBAC7D,cAAc,GAAG,kBAAkB,CAAC,yBAAyB,EAAE,CAAC,CAAC;gBACzE,CAAC;YACL,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,oEAAoE;YACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,mBAAmB,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,cAAc,CAAC;gBACpE,yBAAyB,EAAE,CAAC;YAChC,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,mBAAmB,CAAC;AAC/B,CAAC","sourcesContent":["import { decodeStreamMetadata, type MortonEncodedStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport type IntWrapper from \"./intWrapper\";\nimport {\n decodeConstIntStream,\n decodeIntStream,\n decodeLengthStreamToOffsetBuffer,\n getVectorType,\n} from \"./integerStreamDecoder\";\nimport { VectorType } from \"../vector/vectorType\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport {\n createConstGeometryVector,\n createMortonEncodedConstGeometryVector,\n} from \"../vector/geometry/constGeometryVector\";\nimport { createFlatGeometryVector, createFlatGeometryVectorMortonEncoded } from \"../vector/geometry/flatGeometryVector\";\nimport { OffsetType } from \"../metadata/tile/offsetType\";\nimport { createConstGpuVector } from \"../vector/geometry/constGpuVector\";\nimport { createFlatGpuVector } from \"../vector/geometry/flatGpuVector\";\nimport type { GeometryVector, MortonSettings } from \"../vector/geometry/geometryVector\";\nimport type { GpuVector } from \"../vector/geometry/gpuVector\";\nimport type GeometryScaling from \"./geometryScaling\";\n\n// TODO: get rid of numFeatures parameter\nexport function decodeGeometryColumn(\n tile: Uint8Array,\n numStreams: number,\n offset: IntWrapper,\n numFeatures: number,\n scalingData?: GeometryScaling,\n): GeometryVector | GpuVector {\n const geometryTypeMetadata = decodeStreamMetadata(tile, offset);\n const geometryTypesVectorType = getVectorType(geometryTypeMetadata, numFeatures, tile, offset);\n\n let vertexOffsets: Int32Array = null;\n let vertexBuffer: Int32Array = null;\n let mortonSettings: MortonSettings = null;\n let indexBuffer: Int32Array = null;\n\n if (geometryTypesVectorType === VectorType.CONST) {\n /* All geometries in the colum have the same geometry type */\n const geometryType = decodeConstIntStream(tile, offset, geometryTypeMetadata, false);\n\n // Variables for const geometry path (directly decoded as offsets)\n let geometryOffsets: Uint32Array = null;\n let partOffsets: Uint32Array = null;\n let ringOffsets: Uint32Array = null;\n //TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons\n // in one FeatureTable?\n let triangleOffsets: Uint32Array = null;\n\n for (let i = 0; i < numStreams - 1; i++) {\n const geometryStreamMetadata = decodeStreamMetadata(tile, offset);\n switch (geometryStreamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n switch (geometryStreamMetadata.logicalStreamType.lengthType) {\n case LengthType.GEOMETRIES:\n geometryOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.PARTS:\n partOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.RINGS:\n ringOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.TRIANGLES:\n triangleOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n }\n break;\n case PhysicalStreamType.OFFSET: {\n switch (geometryStreamMetadata.logicalStreamType.offsetType) {\n case OffsetType.VERTEX:\n vertexOffsets = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n case OffsetType.INDEX:\n indexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n }\n break;\n }\n case PhysicalStreamType.DATA: {\n if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {\n vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, true, scalingData);\n } else {\n const mortonMetadata = geometryStreamMetadata as MortonEncodedStreamMetadata;\n mortonSettings = {\n numBits: mortonMetadata.numBits,\n coordinateShift: mortonMetadata.coordinateShift,\n };\n vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false, scalingData);\n }\n break;\n }\n }\n }\n\n if (indexBuffer !== null) {\n if (geometryOffsets != null || partOffsets != null) {\n /* Case when the indices of a Polygon outline are encoded in the tile */\n const topologyVector = { geometryOffsets, partOffsets, ringOffsets };\n return createConstGpuVector(\n numFeatures,\n geometryType,\n triangleOffsets,\n indexBuffer,\n vertexBuffer,\n topologyVector,\n );\n }\n\n /* Case when the no Polygon outlines are encoded in the tile */\n return createConstGpuVector(numFeatures, geometryType, triangleOffsets, indexBuffer, vertexBuffer);\n }\n\n return mortonSettings === null\n ? /* Currently only 2D coordinates (Vec2) are implemented in the encoder */\n createConstGeometryVector(\n numFeatures,\n geometryType,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n )\n : createMortonEncodedConstGeometryVector(\n numFeatures,\n geometryType,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n mortonSettings,\n );\n }\n\n /* Different geometry types are mixed in the geometry column */\n const geometryTypeVector = decodeIntStream(tile, offset, geometryTypeMetadata, false);\n\n // Variables for flat geometry path (decoded as lengths, then converted to offsets)\n let geometryLengths: Int32Array = null;\n let partLengths: Int32Array = null;\n let ringLengths: Int32Array = null;\n //TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons\n // in one FeatureTable?\n let triangleOffsets: Uint32Array = null;\n\n for (let i = 0; i < numStreams - 1; i++) {\n const geometryStreamMetadata = decodeStreamMetadata(tile, offset);\n switch (geometryStreamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n switch (geometryStreamMetadata.logicalStreamType.lengthType) {\n case LengthType.GEOMETRIES:\n geometryLengths = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n case LengthType.PARTS:\n partLengths = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n case LengthType.RINGS:\n ringLengths = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n case LengthType.TRIANGLES:\n triangleOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n }\n break;\n case PhysicalStreamType.OFFSET:\n switch (geometryStreamMetadata.logicalStreamType.offsetType) {\n case OffsetType.VERTEX:\n vertexOffsets = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n case OffsetType.INDEX:\n indexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false);\n break;\n }\n break;\n case PhysicalStreamType.DATA:\n if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {\n vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, true, scalingData);\n } else {\n const mortonMetadata = geometryStreamMetadata as MortonEncodedStreamMetadata;\n mortonSettings = {\n numBits: mortonMetadata.numBits,\n coordinateShift: mortonMetadata.coordinateShift,\n };\n vertexBuffer = decodeIntStream(tile, offset, geometryStreamMetadata, false, scalingData);\n }\n break;\n }\n }\n\n // TODO: refactor the following instructions -> decode in one pass for performance reasons\n /* Calculate the offsets from the length buffer for util access */\n let geometryOffsets: Uint32Array = null;\n let partOffsets: Uint32Array = null;\n let ringOffsets: Uint32Array = null;\n\n if (geometryLengths !== null) {\n geometryOffsets = decodeRootLengthStream(geometryTypeVector, geometryLengths, 2);\n if (partLengths !== null && ringLengths !== null) {\n partOffsets = decodeLevel1LengthStream(geometryTypeVector, geometryOffsets, partLengths, false);\n ringOffsets = decodeLevel2LengthStream(geometryTypeVector, geometryOffsets, partOffsets, ringLengths);\n } else if (partLengths !== null) {\n partOffsets = decodeLevel1WithoutRingBufferLengthStream(geometryTypeVector, geometryOffsets, partLengths);\n }\n } else if (partLengths !== null && ringLengths !== null) {\n partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 1);\n ringOffsets = decodeLevel1LengthStream(geometryTypeVector, partOffsets, ringLengths, true);\n } else if (partLengths !== null) {\n partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 0);\n }\n\n if (indexBuffer !== null && partOffsets === null) {\n /* Case when the indices of a Polygon outline are not encoded in the data so no\n * topology data are present in the tile */\n return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer);\n }\n\n if (indexBuffer !== null) {\n /* Case when the indices of a Polygon outline are encoded in the tile */\n return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer, {\n geometryOffsets,\n partOffsets,\n ringOffsets,\n });\n }\n\n return mortonSettings === null /* Currently only 2D coordinates (Vec2) are implemented in the encoder */\n ? createFlatGeometryVector(\n geometryTypeVector,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n )\n : createFlatGeometryVectorMortonEncoded(\n geometryTypeVector,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n mortonSettings,\n );\n}\n\n/*\n * Handle the parsing of the different topology length buffers separate not generic to reduce the\n * branching and improve the performance\n */\nfunction decodeRootLengthStream(\n geometryTypes: Int32Array,\n rootLengthStream: Int32Array | Uint32Array,\n bufferId: number,\n): Uint32Array {\n const rootBufferOffsets = new Uint32Array(geometryTypes.length + 1);\n let previousOffset = 0;\n rootBufferOffsets[0] = previousOffset;\n let rootLengthCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n /* Test if the geometry has and entry in the root buffer\n * BufferId: 2 GeometryOffsets -> MultiPolygon, MultiLineString, MultiPoint\n * BufferId: 1 PartOffsets -> Polygon\n * BufferId: 0 PartOffsets, RingOffsets -> LineString\n * */\n previousOffset = rootBufferOffsets[i + 1] =\n previousOffset + (geometryTypes[i] > bufferId ? rootLengthStream[rootLengthCounter++] : 1);\n }\n\n return rootBufferOffsets;\n}\n\nfunction decodeLevel1LengthStream(\n geometryTypes: Int32Array,\n rootOffsetBuffer: Uint32Array,\n level1LengthBuffer: Int32Array,\n isLineStringPresent: boolean,\n): Uint32Array {\n const level1BufferOffsets = new Uint32Array(rootOffsetBuffer[rootOffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level1BufferOffsets[0] = previousOffset;\n let level1BufferCounter = 1;\n let level1LengthBufferCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (\n geometryType === 5 ||\n geometryType === 2 ||\n (isLineStringPresent && (geometryType === 4 || geometryType === 1))\n ) {\n /* For MultiPolygon, Polygon and in some cases for MultiLineString and LineString\n * a value in the level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n previousOffset = level1BufferOffsets[level1BufferCounter++] =\n previousOffset + level1LengthBuffer[level1LengthBufferCounter++];\n }\n } else {\n /* For MultiPoint and Point and in some cases for MultiLineString and LineString no value in the\n * level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level1BufferOffsets[level1BufferCounter++] = ++previousOffset;\n }\n }\n }\n\n return level1BufferOffsets;\n}\n\n/*\n * Case where no ring buffer exists so no MultiPolygon or Polygon geometry is part of the buffer\n */\nfunction decodeLevel1WithoutRingBufferLengthStream(\n geometryTypes: Int32Array,\n rootOffsetBuffer: Uint32Array,\n level1LengthBuffer: Int32Array,\n): Uint32Array {\n const level1BufferOffsets = new Uint32Array(rootOffsetBuffer[rootOffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level1BufferOffsets[0] = previousOffset;\n let level1OffsetBufferCounter = 1;\n let level1LengthCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (geometryType === 4 || geometryType === 1) {\n /* For MultiLineString and LineString a value in the level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n previousOffset = level1BufferOffsets[level1OffsetBufferCounter++] =\n previousOffset + level1LengthBuffer[level1LengthCounter++];\n }\n } else {\n /* For MultiPoint and Point no value in level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level1BufferOffsets[level1OffsetBufferCounter++] = ++previousOffset;\n }\n }\n }\n\n return level1BufferOffsets;\n}\n\nfunction decodeLevel2LengthStream(\n geometryTypes: Int32Array,\n rootOffsetBuffer: Uint32Array,\n level1OffsetBuffer: Uint32Array,\n level2LengthBuffer: Int32Array,\n): Uint32Array {\n const level2BufferOffsets = new Uint32Array(level1OffsetBuffer[level1OffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level2BufferOffsets[0] = previousOffset;\n let level1OffsetBufferCounter = 1;\n let level2OffsetBufferCounter = 1;\n let level2LengthBufferCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (geometryType !== 0 && geometryType !== 3) {\n /* For MultiPolygon, MultiLineString, Polygon and LineString a value in level2LengthBuffer\n * exists */\n for (let j = 0; j < numGeometries; j++) {\n const numParts =\n level1OffsetBuffer[level1OffsetBufferCounter] - level1OffsetBuffer[level1OffsetBufferCounter - 1];\n level1OffsetBufferCounter++;\n for (let k = 0; k < numParts; k++) {\n previousOffset = level2BufferOffsets[level2OffsetBufferCounter++] =\n previousOffset + level2LengthBuffer[level2LengthBufferCounter++];\n }\n }\n } else {\n /* For MultiPoint and Point no value in level2LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level2BufferOffsets[level2OffsetBufferCounter++] = ++previousOffset;\n level1OffsetBufferCounter++;\n }\n }\n }\n\n return level2BufferOffsets;\n}\n"]}
1
+ {"version":3,"file":"geometryDecoder.js","sourceRoot":"","sources":["../../src/decoding/geometryDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { decodeStreamMetadata, type MortonEncodedStreamMetadata } from \"../metadata/tile/streamMetadataDecoder\";\nimport type IntWrapper from \"./intWrapper\";\nimport {\n decodeSignedInt32Stream,\n decodeLengthStreamToOffsetBuffer,\n decodeUnsignedConstInt32Stream,\n decodeUnsignedInt32Stream,\n getVectorType,\n} from \"./integerStreamDecoder\";\nimport { VectorType } from \"../vector/vectorType\";\nimport { PhysicalStreamType } from \"../metadata/tile/physicalStreamType\";\nimport { LengthType } from \"../metadata/tile/lengthType\";\nimport { DictionaryType } from \"../metadata/tile/dictionaryType\";\nimport {\n createConstGeometryVector,\n createMortonEncodedConstGeometryVector,\n} from \"../vector/geometry/constGeometryVector\";\nimport { createFlatGeometryVector, createFlatGeometryVectorMortonEncoded } from \"../vector/geometry/flatGeometryVector\";\nimport { OffsetType } from \"../metadata/tile/offsetType\";\nimport { createConstGpuVector } from \"../vector/geometry/constGpuVector\";\nimport { createFlatGpuVector } from \"../vector/geometry/flatGpuVector\";\nimport type { GeometryVector, MortonSettings } from \"../vector/geometry/geometryVector\";\nimport type { GpuVector } from \"../vector/geometry/gpuVector\";\nimport type GeometryScaling from \"./geometryScaling\";\n\n// TODO: get rid of numFeatures parameter\nexport function decodeGeometryColumn(\n tile: Uint8Array,\n numStreams: number,\n offset: IntWrapper,\n numFeatures: number,\n scalingData?: GeometryScaling,\n): GeometryVector | GpuVector {\n const geometryTypeMetadata = decodeStreamMetadata(tile, offset);\n const geometryTypesVectorType = getVectorType(geometryTypeMetadata, numFeatures, tile, offset);\n\n let vertexOffsets: Uint32Array | undefined;\n let vertexBuffer: Int32Array | Uint32Array | undefined;\n let mortonSettings: MortonSettings | undefined;\n let indexBuffer: Uint32Array | undefined;\n\n if (geometryTypesVectorType === VectorType.CONST) {\n /* All geometries in the column have the same geometry type */\n const geometryType = decodeUnsignedConstInt32Stream(tile, offset, geometryTypeMetadata);\n\n // Variables for const geometry path (directly decoded as offsets)\n let geometryOffsets: Uint32Array | undefined;\n let partOffsets: Uint32Array | undefined;\n let ringOffsets: Uint32Array | undefined;\n //TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons\n // in one FeatureTable?\n let triangleOffsets: Uint32Array | undefined;\n\n for (let i = 0; i < numStreams - 1; i++) {\n const geometryStreamMetadata = decodeStreamMetadata(tile, offset);\n switch (geometryStreamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n switch (geometryStreamMetadata.logicalStreamType.lengthType) {\n case LengthType.GEOMETRIES:\n geometryOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.PARTS:\n partOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.RINGS:\n ringOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.TRIANGLES:\n triangleOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n }\n break;\n case PhysicalStreamType.OFFSET: {\n switch (geometryStreamMetadata.logicalStreamType.offsetType) {\n case OffsetType.VERTEX:\n vertexOffsets = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n case OffsetType.INDEX:\n indexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n }\n break;\n }\n case PhysicalStreamType.DATA: {\n if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {\n vertexBuffer = decodeSignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);\n } else {\n const mortonMetadata = geometryStreamMetadata as MortonEncodedStreamMetadata;\n mortonSettings = {\n numBits: mortonMetadata.numBits,\n coordinateShift: mortonMetadata.coordinateShift,\n };\n vertexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);\n }\n break;\n }\n }\n }\n\n if (indexBuffer) {\n if (geometryOffsets !== undefined || partOffsets !== undefined) {\n /* Case when the indices of a Polygon outline are encoded in the tile */\n const topologyVector = { geometryOffsets, partOffsets, ringOffsets };\n return createConstGpuVector(\n numFeatures,\n geometryType,\n triangleOffsets,\n indexBuffer,\n vertexBuffer,\n topologyVector,\n );\n }\n\n /* Case when the no Polygon outlines are encoded in the tile */\n return createConstGpuVector(numFeatures, geometryType, triangleOffsets, indexBuffer, vertexBuffer);\n }\n\n return mortonSettings === undefined\n ? /* Currently only 2D coordinates (Vec2) are implemented in the encoder */\n createConstGeometryVector(\n numFeatures,\n geometryType,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n )\n : createMortonEncodedConstGeometryVector(\n numFeatures,\n geometryType,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n mortonSettings,\n );\n }\n\n /* Different geometry types are mixed in the geometry column */\n const geometryTypeVector = decodeUnsignedInt32Stream(tile, offset, geometryTypeMetadata);\n\n // Variables for flat geometry path (decoded as lengths, then converted to offsets)\n let geometryLengths: Uint32Array | undefined;\n let partLengths: Uint32Array | undefined;\n let ringLengths: Uint32Array | undefined;\n //TODO: use geometryOffsets for that? -> but then tessellated polygons can't be used with normal polygons\n // in one FeatureTable?\n let triangleOffsets: Uint32Array | undefined;\n\n for (let i = 0; i < numStreams - 1; i++) {\n const geometryStreamMetadata = decodeStreamMetadata(tile, offset);\n switch (geometryStreamMetadata.physicalStreamType) {\n case PhysicalStreamType.LENGTH:\n switch (geometryStreamMetadata.logicalStreamType.lengthType) {\n case LengthType.GEOMETRIES:\n geometryLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.PARTS:\n partLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.RINGS:\n ringLengths = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n case LengthType.TRIANGLES:\n triangleOffsets = decodeLengthStreamToOffsetBuffer(tile, offset, geometryStreamMetadata);\n }\n break;\n case PhysicalStreamType.OFFSET:\n switch (geometryStreamMetadata.logicalStreamType.offsetType) {\n case OffsetType.VERTEX:\n vertexOffsets = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n case OffsetType.INDEX:\n indexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata);\n break;\n }\n break;\n case PhysicalStreamType.DATA:\n if (DictionaryType.VERTEX === geometryStreamMetadata.logicalStreamType.dictionaryType) {\n vertexBuffer = decodeSignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);\n } else {\n const mortonMetadata = geometryStreamMetadata as MortonEncodedStreamMetadata;\n mortonSettings = {\n numBits: mortonMetadata.numBits,\n coordinateShift: mortonMetadata.coordinateShift,\n };\n vertexBuffer = decodeUnsignedInt32Stream(tile, offset, geometryStreamMetadata, scalingData);\n }\n break;\n }\n }\n\n // TODO: refactor the following instructions -> decode in one pass for performance reasons\n /* Calculate the offsets from the length buffer for util access */\n let geometryOffsets: Uint32Array | undefined;\n let partOffsets: Uint32Array | undefined;\n let ringOffsets: Uint32Array | undefined;\n\n if (geometryLengths) {\n geometryOffsets = decodeRootLengthStream(geometryTypeVector, geometryLengths, 2);\n if (partLengths && ringLengths) {\n partOffsets = decodeLevel1LengthStream(geometryTypeVector, geometryOffsets, partLengths, false);\n ringOffsets = decodeLevel2LengthStream(geometryTypeVector, geometryOffsets, partOffsets, ringLengths);\n } else if (partLengths) {\n partOffsets = decodeLevel1WithoutRingBufferLengthStream(geometryTypeVector, geometryOffsets, partLengths);\n }\n } else if (partLengths && ringLengths) {\n partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 1);\n ringOffsets = decodeLevel1LengthStream(geometryTypeVector, partOffsets, ringLengths, true);\n } else if (partLengths) {\n partOffsets = decodeRootLengthStream(geometryTypeVector, partLengths, 0);\n }\n\n if (indexBuffer && !partOffsets) {\n /* Case when the indices of a Polygon outline are not encoded in the data so no\n * topology data are present in the tile */\n return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer);\n }\n\n if (indexBuffer) {\n /* Case when the indices of a Polygon outline are encoded in the tile */\n return createFlatGpuVector(geometryTypeVector, triangleOffsets, indexBuffer, vertexBuffer, {\n geometryOffsets,\n partOffsets,\n ringOffsets,\n });\n }\n\n return mortonSettings === undefined /* Currently only 2D coordinates (Vec2) are implemented in the encoder */\n ? createFlatGeometryVector(\n geometryTypeVector,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n )\n : createFlatGeometryVectorMortonEncoded(\n geometryTypeVector,\n { geometryOffsets, partOffsets, ringOffsets },\n vertexOffsets,\n vertexBuffer,\n mortonSettings,\n );\n}\n\n/*\n * Handle the parsing of the different topology length buffers separate not generic to reduce the\n * branching and improve the performance\n */\nfunction decodeRootLengthStream(\n geometryTypes: Uint32Array,\n rootLengthStream: Uint32Array,\n bufferId: number,\n): Uint32Array {\n const rootBufferOffsets = new Uint32Array(geometryTypes.length + 1);\n let previousOffset = 0;\n rootBufferOffsets[0] = previousOffset;\n let rootLengthCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n /* Test if the geometry has and entry in the root buffer\n * BufferId: 2 GeometryOffsets -> MultiPolygon, MultiLineString, MultiPoint\n * BufferId: 1 PartOffsets -> Polygon\n * BufferId: 0 PartOffsets, RingOffsets -> LineString\n * */\n previousOffset = rootBufferOffsets[i + 1] =\n previousOffset + (geometryTypes[i] > bufferId ? rootLengthStream[rootLengthCounter++] : 1);\n }\n\n return rootBufferOffsets;\n}\n\nfunction decodeLevel1LengthStream(\n geometryTypes: Uint32Array,\n rootOffsetBuffer: Uint32Array,\n level1LengthBuffer: Uint32Array,\n isLineStringPresent: boolean,\n): Uint32Array {\n const level1BufferOffsets = new Uint32Array(rootOffsetBuffer[rootOffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level1BufferOffsets[0] = previousOffset;\n let level1BufferCounter = 1;\n let level1LengthBufferCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (\n geometryType === 5 ||\n geometryType === 2 ||\n (isLineStringPresent && (geometryType === 4 || geometryType === 1))\n ) {\n /* For MultiPolygon, Polygon and in some cases for MultiLineString and LineString\n * a value in the level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n previousOffset = level1BufferOffsets[level1BufferCounter++] =\n previousOffset + level1LengthBuffer[level1LengthBufferCounter++];\n }\n } else {\n /* For MultiPoint and Point and in some cases for MultiLineString and LineString no value in the\n * level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level1BufferOffsets[level1BufferCounter++] = ++previousOffset;\n }\n }\n }\n\n return level1BufferOffsets;\n}\n\n/*\n * Case where no ring buffer exists so no MultiPolygon or Polygon geometry is part of the buffer\n */\nfunction decodeLevel1WithoutRingBufferLengthStream(\n geometryTypes: Uint32Array,\n rootOffsetBuffer: Uint32Array,\n level1LengthBuffer: Uint32Array,\n): Uint32Array {\n const level1BufferOffsets = new Uint32Array(rootOffsetBuffer[rootOffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level1BufferOffsets[0] = previousOffset;\n let level1OffsetBufferCounter = 1;\n let level1LengthCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (geometryType === 4 || geometryType === 1) {\n /* For MultiLineString and LineString a value in the level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n previousOffset = level1BufferOffsets[level1OffsetBufferCounter++] =\n previousOffset + level1LengthBuffer[level1LengthCounter++];\n }\n } else {\n /* For MultiPoint and Point no value in level1LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level1BufferOffsets[level1OffsetBufferCounter++] = ++previousOffset;\n }\n }\n }\n\n return level1BufferOffsets;\n}\n\nfunction decodeLevel2LengthStream(\n geometryTypes: Uint32Array,\n rootOffsetBuffer: Uint32Array,\n level1OffsetBuffer: Uint32Array,\n level2LengthBuffer: Uint32Array,\n): Uint32Array {\n const level2BufferOffsets = new Uint32Array(level1OffsetBuffer[level1OffsetBuffer.length - 1] + 1);\n let previousOffset = 0;\n level2BufferOffsets[0] = previousOffset;\n let level1OffsetBufferCounter = 1;\n let level2OffsetBufferCounter = 1;\n let level2LengthBufferCounter = 0;\n for (let i = 0; i < geometryTypes.length; i++) {\n const geometryType = geometryTypes[i];\n const numGeometries = rootOffsetBuffer[i + 1] - rootOffsetBuffer[i];\n if (geometryType !== 0 && geometryType !== 3) {\n /* For MultiPolygon, MultiLineString, Polygon and LineString a value in level2LengthBuffer\n * exists */\n for (let j = 0; j < numGeometries; j++) {\n const numParts =\n level1OffsetBuffer[level1OffsetBufferCounter] - level1OffsetBuffer[level1OffsetBufferCounter - 1];\n level1OffsetBufferCounter++;\n for (let k = 0; k < numParts; k++) {\n previousOffset = level2BufferOffsets[level2OffsetBufferCounter++] =\n previousOffset + level2LengthBuffer[level2LengthBufferCounter++];\n }\n }\n } else {\n /* For MultiPoint and Point no value in level2LengthBuffer exists */\n for (let j = 0; j < numGeometries; j++) {\n level2BufferOffsets[level2OffsetBufferCounter++] = ++previousOffset;\n level1OffsetBufferCounter++;\n }\n }\n }\n\n return level2BufferOffsets;\n}\n"]}
@@ -1,6 +1,5 @@
1
1
  // Ported from https://github.com/lemire/JavaFastPFOR/blob/master/src/main/java/me/lemire/integercompression/IntWrapper.java
2
2
  export default class IntWrapper {
3
- value;
4
3
  constructor(value) {
5
4
  this.value = value;
6
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"intWrapper.js","sourceRoot":"","sources":["../../src/decoding/intWrapper.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAE5H,MAAM,CAAC,OAAO,OAAO,UAAU;IACP;IAApB,YAAoB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAE9B,GAAG;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,GAAG,CAAC,CAAS;QAChB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAEM,GAAG,CAAC,CAAS;QAChB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IACpB,CAAC;CACJ","sourcesContent":["// Ported from https://github.com/lemire/JavaFastPFOR/blob/master/src/main/java/me/lemire/integercompression/IntWrapper.java\n\nexport default class IntWrapper {\n constructor(private value: number) {}\n\n public get(): number {\n return this.value;\n }\n\n public set(v: number): void {\n this.value = v;\n }\n\n public increment(): number {\n return this.value++;\n }\n\n public add(v: number): void {\n this.value += v;\n }\n}\n"]}
1
+ {"version":3,"file":"intWrapper.js","sourceRoot":"","sources":["../../src/decoding/intWrapper.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAE5H,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,YAAoB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAE9B,GAAG;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,GAAG,CAAC,CAAS;QAChB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAEM,GAAG,CAAC,CAAS;QAChB,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IACpB,CAAC;CACJ","sourcesContent":["// Ported from https://github.com/lemire/JavaFastPFOR/blob/master/src/main/java/me/lemire/integercompression/IntWrapper.java\n\nexport default class IntWrapper {\n constructor(private value: number) {}\n\n public get(): number {\n return this.value;\n }\n\n public set(v: number): void {\n this.value = v;\n }\n\n public increment(): number {\n return this.value++;\n }\n\n public add(v: number): void {\n this.value += v;\n }\n}\n"]}
@@ -2,33 +2,33 @@ import type IntWrapper from "./intWrapper";
2
2
  import { type FastPforWireDecodeWorkspace } from "./fastPforDecoder";
3
3
  export type { FastPforWireDecodeWorkspace } from "./fastPforDecoder";
4
4
  export { createFastPforWireDecodeWorkspace } from "./fastPforDecoder";
5
- export declare function decodeVarintInt32(buf: Uint8Array, bufferOffset: IntWrapper, numValues: number): Int32Array;
5
+ export declare function decodeVarintInt32(buf: Uint8Array, bufferOffset: IntWrapper, numValues: number): Uint32Array;
6
6
  export declare function decodeVarintInt64(src: Uint8Array, offset: IntWrapper, numValues: number): BigUint64Array;
7
7
  export declare function decodeVarintFloat64(src: Uint8Array, offset: IntWrapper, numValues: number): Float64Array;
8
- export declare function decodeFastPfor(encodedBytes: Uint8Array, expectedValueCount: number, encodedByteLength: number, offset: IntWrapper): Int32Array;
9
- export declare function decodeFastPforWithWorkspace(encodedBytes: Uint8Array, expectedValueCount: number, encodedByteLength: number, offset: IntWrapper, workspace: FastPforWireDecodeWorkspace): Int32Array;
8
+ export declare function decodeFastPfor(encodedBytes: Uint8Array, expectedValueCount: number, encodedByteLength: number, offset: IntWrapper): Uint32Array;
9
+ export declare function decodeFastPforWithWorkspace(encodedBytes: Uint8Array, expectedValueCount: number, encodedByteLength: number, offset: IntWrapper, workspace: FastPforWireDecodeWorkspace): Uint32Array;
10
10
  export declare function decodeZigZagInt32Value(encoded: number): number;
11
11
  export declare function decodeZigZagInt64Value(encoded: bigint): bigint;
12
12
  export declare function decodeZigZagFloat64Value(encoded: number): number;
13
- export declare function decodeZigZagInt32(encodedData: Int32Array): void;
13
+ export declare function decodeZigZagInt32(encodedData: Uint32Array): Int32Array;
14
14
  export declare function decodeZigZagInt64(encodedData: BigUint64Array): BigInt64Array;
15
15
  export declare function decodeZigZagFloat64(encodedData: Float64Array): void;
16
- export declare function decodeUnsignedRleInt32(encodedData: Int32Array, numRuns: number, numTotalValues?: number): Int32Array;
16
+ export declare function decodeUnsignedRleInt32(encodedData: Uint32Array, numRuns: number, numTotalValues?: number): Uint32Array;
17
17
  export declare function decodeUnsignedRleInt64(encodedData: BigUint64Array, numRuns: number, numTotalValues?: number): BigUint64Array;
18
18
  export declare function decodeUnsignedRleFloat64(encodedData: Float64Array, numRuns: number, numTotalValues: number): Float64Array;
19
- export declare function decodeZigZagDeltaInt32(data: Int32Array): void;
19
+ export declare function decodeZigZagDeltaInt32(data: Uint32Array): Int32Array;
20
20
  export declare function decodeZigZagDeltaInt64(data: BigInt64Array | BigUint64Array): BigInt64Array;
21
21
  export declare function decodeZigZagDeltaFloat64(data: Float64Array): void;
22
- export declare function decodeZigZagRleInt32(data: Int32Array, numRuns: number, numTotalValues?: number): Int32Array;
22
+ export declare function decodeZigZagRleInt32(data: Uint32Array, numRuns: number, numTotalValues?: number): Int32Array;
23
23
  export declare function decodeZigZagRleInt64(data: BigUint64Array, numRuns: number, numTotalValues?: number): BigInt64Array;
24
24
  export declare function decodeZigZagRleFloat64(data: Float64Array, numRuns: number, numTotalValues: number): Float64Array;
25
25
  export declare function fastInverseDelta(data: Uint32Array | Int32Array): void;
26
- export declare function inverseDelta(data: Int32Array): void;
27
- export declare function decodeComponentwiseDeltaVec2(data: Int32Array): void;
28
- export declare function decodeComponentwiseDeltaVec2Scaled(data: Int32Array, scale: number, min: number, max: number): void;
29
- export declare function decodeZigZagDeltaOfDeltaInt32(data: Int32Array): Uint32Array;
30
- export declare function decodeZigZagRleDeltaInt32(data: Int32Array, numRuns: number, numTotalValues: number): Uint32Array;
31
- export declare function decodeRleDeltaInt32(data: Int32Array, numRuns: number, numTotalValues: number): Uint32Array;
26
+ export declare function inverseDelta(data: Uint32Array): void;
27
+ export declare function decodeComponentwiseDeltaVec2(data: Uint32Array): Int32Array;
28
+ export declare function decodeComponentwiseDeltaVec2Scaled(data: Uint32Array, scale: number, min: number, max: number): Int32Array;
29
+ export declare function decodeZigZagDeltaOfDeltaInt32(data: Uint32Array): Uint32Array;
30
+ export declare function decodeZigZagRleDeltaInt32(data: Uint32Array, numRuns: number, numTotalValues: number): Int32Array;
31
+ export declare function decodeRleDeltaInt32(data: Uint32Array, numRuns: number, numTotalValues: number): Uint32Array;
32
32
  /**
33
33
  * Decode Delta-RLE with multiple runs by fully reconstructing values.
34
34
  *
@@ -37,14 +37,18 @@ export declare function decodeRleDeltaInt32(data: Int32Array, numRuns: number, n
37
37
  * @param numValues Total number of values to reconstruct
38
38
  * @returns Reconstructed values with deltas applied
39
39
  */
40
- export declare function decodeDeltaRleInt32(data: Int32Array, numRuns: number, numValues: number): Int32Array;
40
+ export declare function decodeDeltaRleInt32(data: Uint32Array, numRuns: number, numValues: number): Int32Array;
41
41
  /**
42
42
  * Decode Delta-RLE with multiple runs for 64-bit integers.
43
43
  */
44
44
  export declare function decodeDeltaRleInt64(data: BigUint64Array, numRuns: number, numValues: number): BigInt64Array;
45
- export declare function decodeUnsignedConstRleInt32(data: Int32Array): number;
46
- export declare function decodeZigZagConstRleInt32(data: Int32Array): number;
47
- export declare function decodeZigZagSequenceRleInt32(data: Int32Array): [baseValue: number, delta: number];
45
+ export declare function decodeUnsignedZigZagDeltaInt32(data: Uint32Array): Uint32Array;
46
+ export declare function decodeUnsignedZigZagDeltaInt64(data: BigUint64Array): BigUint64Array;
47
+ export declare function decodeUnsignedComponentwiseDeltaVec2(data: Uint32Array): Uint32Array;
48
+ export declare function decodeUnsignedComponentwiseDeltaVec2Scaled(data: Uint32Array, scale: number, min: number, max: number): Uint32Array;
49
+ export declare function decodeUnsignedConstRleInt32(data: Int32Array | Uint32Array): number;
50
+ export declare function decodeZigZagConstRleInt32(data: Int32Array | Uint32Array): number;
51
+ export declare function decodeZigZagSequenceRleInt32(data: Int32Array | Uint32Array): [baseValue: number, delta: number];
48
52
  export declare function decodeUnsignedConstRleInt64(data: BigInt64Array | BigUint64Array): bigint;
49
53
  export declare function decodeZigZagConstRleInt64(data: BigInt64Array | BigUint64Array): bigint;
50
54
  export declare function decodeZigZagSequenceRleInt64(data: BigInt64Array | BigUint64Array): [baseValue: bigint, delta: bigint];
@@ -3,7 +3,7 @@ import { decodeBigEndianInt32sInto } from "./bigEndianDecode";
3
3
  export { createFastPforWireDecodeWorkspace } from "./fastPforDecoder";
4
4
  //based on https://github.com/mapbox/pbf/blob/main/index.js
5
5
  export function decodeVarintInt32(buf, bufferOffset, numValues) {
6
- const dst = new Int32Array(numValues);
6
+ const dst = new Uint32Array(numValues);
7
7
  let dstOffset = 0;
8
8
  let offset = bufferOffset.get();
9
9
  for (let i = 0; i < dst.length; i++) {
@@ -164,9 +164,11 @@ export function decodeZigZagFloat64Value(encoded) {
164
164
  return encoded % 2 === 1 ? (encoded + 1) / -2 : encoded / 2;
165
165
  }
166
166
  export function decodeZigZagInt32(encodedData) {
167
+ const decodedValues = new Int32Array(encodedData.length);
167
168
  for (let i = 0; i < encodedData.length; i++) {
168
- encodedData[i] = decodeZigZagInt32Value(encodedData[i]);
169
+ decodedValues[i] = decodeZigZagInt32Value(encodedData[i]);
169
170
  }
171
+ return decodedValues;
170
172
  }
171
173
  export function decodeZigZagInt64(encodedData) {
172
174
  const decodedValues = new BigInt64Array(encodedData.length);
@@ -188,7 +190,7 @@ export function decodeUnsignedRleInt32(encodedData, numRuns, numTotalValues) {
188
190
  numTotalValues += encodedData[i];
189
191
  }
190
192
  }
191
- const decodedValues = new Int32Array(numTotalValues);
193
+ const decodedValues = new Uint32Array(numTotalValues);
192
194
  let offset = 0;
193
195
  for (let i = 0; i < numRuns; i++) {
194
196
  const runLength = encodedData[i];
@@ -232,7 +234,8 @@ export function decodeUnsignedRleFloat64(encodedData, numRuns, numTotalValues) {
232
234
  * Inspired by https://github.com/lemire/JavaFastPFOR/blob/master/src/main/java/me/lemire/integercompression/differential/Delta.java
233
235
  */
234
236
  export function decodeZigZagDeltaInt32(data) {
235
- data[0] = decodeZigZagInt32Value(data[0]);
237
+ const decodedValues = new Int32Array(data.length);
238
+ decodedValues[0] = decodeZigZagInt32Value(data[0]);
236
239
  const sz0 = (data.length / 4) * 4;
237
240
  let i = 1;
238
241
  if (sz0 >= 4) {
@@ -241,15 +244,16 @@ export function decodeZigZagDeltaInt32(data) {
241
244
  const data2 = data[i + 1];
242
245
  const data3 = data[i + 2];
243
246
  const data4 = data[i + 3];
244
- data[i] = decodeZigZagInt32Value(data1) + data[i - 1];
245
- data[i + 1] = decodeZigZagInt32Value(data2) + data[i];
246
- data[i + 2] = decodeZigZagInt32Value(data3) + data[i + 1];
247
- data[i + 3] = decodeZigZagInt32Value(data4) + data[i + 2];
247
+ decodedValues[i] = decodeZigZagInt32Value(data1) + decodedValues[i - 1];
248
+ decodedValues[i + 1] = decodeZigZagInt32Value(data2) + decodedValues[i];
249
+ decodedValues[i + 2] = decodeZigZagInt32Value(data3) + decodedValues[i + 1];
250
+ decodedValues[i + 3] = decodeZigZagInt32Value(data4) + decodedValues[i + 2];
248
251
  }
249
252
  }
250
253
  for (; i !== data.length; ++i) {
251
- data[i] = decodeZigZagInt32Value(data[i]) + data[i - 1];
254
+ decodedValues[i] = decodeZigZagInt32Value(data[i]) + decodedValues[i - 1];
252
255
  }
256
+ return decodedValues;
253
257
  }
254
258
  export function decodeZigZagDeltaInt64(data) {
255
259
  const decodedValues = new BigInt64Array(data.length);
@@ -375,9 +379,10 @@ export function inverseDelta(data) {
375
379
  */
376
380
  export function decodeComponentwiseDeltaVec2(data) {
377
381
  if (data.length < 2)
378
- return;
379
- data[0] = decodeZigZagInt32Value(data[0]);
380
- data[1] = decodeZigZagInt32Value(data[1]);
382
+ return new Int32Array(data);
383
+ const decodedData = new Int32Array(data.length);
384
+ decodedData[0] = decodeZigZagInt32Value(data[0]);
385
+ decodedData[1] = decodeZigZagInt32Value(data[1]);
381
386
  const sz0 = (data.length / 4) * 4;
382
387
  let i = 2;
383
388
  if (sz0 >= 4) {
@@ -386,24 +391,26 @@ export function decodeComponentwiseDeltaVec2(data) {
386
391
  const y1 = data[i + 1];
387
392
  const x2 = data[i + 2];
388
393
  const y2 = data[i + 3];
389
- data[i] = decodeZigZagInt32Value(x1) + data[i - 2];
390
- data[i + 1] = decodeZigZagInt32Value(y1) + data[i - 1];
391
- data[i + 2] = decodeZigZagInt32Value(x2) + data[i];
392
- data[i + 3] = decodeZigZagInt32Value(y2) + data[i + 1];
394
+ decodedData[i] = decodeZigZagInt32Value(x1) + decodedData[i - 2];
395
+ decodedData[i + 1] = decodeZigZagInt32Value(y1) + decodedData[i - 1];
396
+ decodedData[i + 2] = decodeZigZagInt32Value(x2) + decodedData[i];
397
+ decodedData[i + 3] = decodeZigZagInt32Value(y2) + decodedData[i + 1];
393
398
  }
394
399
  }
395
400
  for (; i !== data.length; i += 2) {
396
- data[i] = decodeZigZagInt32Value(data[i]) + data[i - 2];
397
- data[i + 1] = decodeZigZagInt32Value(data[i + 1]) + data[i - 1];
401
+ decodedData[i] = decodeZigZagInt32Value(data[i]) + decodedData[i - 2];
402
+ decodedData[i + 1] = decodeZigZagInt32Value(data[i + 1]) + decodedData[i - 1];
398
403
  }
404
+ return decodedData;
399
405
  }
400
406
  export function decodeComponentwiseDeltaVec2Scaled(data, scale, min, max) {
401
407
  if (data.length < 2)
402
- return;
408
+ return new Int32Array(data);
409
+ const decodedData = new Int32Array(data.length);
403
410
  let previousVertexX = decodeZigZagInt32Value(data[0]);
404
411
  let previousVertexY = decodeZigZagInt32Value(data[1]);
405
- data[0] = clamp(Math.round(previousVertexX * scale), min, max);
406
- data[1] = clamp(Math.round(previousVertexY * scale), min, max);
412
+ decodedData[0] = clamp(Math.round(previousVertexX * scale), min, max);
413
+ decodedData[1] = clamp(Math.round(previousVertexY * scale), min, max);
407
414
  const sz0 = data.length / 16;
408
415
  let i = 2;
409
416
  if (sz0 >= 4) {
@@ -412,22 +419,23 @@ export function decodeComponentwiseDeltaVec2Scaled(data, scale, min, max) {
412
419
  const y1 = data[i + 1];
413
420
  const currentVertexX = decodeZigZagInt32Value(x1) + previousVertexX;
414
421
  const currentVertexY = decodeZigZagInt32Value(y1) + previousVertexY;
415
- data[i] = clamp(Math.round(currentVertexX * scale), min, max);
416
- data[i + 1] = clamp(Math.round(currentVertexY * scale), min, max);
422
+ decodedData[i] = clamp(Math.round(currentVertexX * scale), min, max);
423
+ decodedData[i + 1] = clamp(Math.round(currentVertexY * scale), min, max);
417
424
  const x2 = data[i + 2];
418
425
  const y2 = data[i + 3];
419
426
  previousVertexX = decodeZigZagInt32Value(x2) + currentVertexX;
420
427
  previousVertexY = decodeZigZagInt32Value(y2) + currentVertexY;
421
- data[i + 2] = clamp(Math.round(previousVertexX * scale), min, max);
422
- data[i + 3] = clamp(Math.round(previousVertexY * scale), min, max);
428
+ decodedData[i + 2] = clamp(Math.round(previousVertexX * scale), min, max);
429
+ decodedData[i + 3] = clamp(Math.round(previousVertexY * scale), min, max);
423
430
  }
424
431
  }
425
432
  for (; i !== data.length; i += 2) {
426
433
  previousVertexX += decodeZigZagInt32Value(data[i]);
427
434
  previousVertexY += decodeZigZagInt32Value(data[i + 1]);
428
- data[i] = clamp(Math.round(previousVertexX * scale), min, max);
429
- data[i + 1] = clamp(Math.round(previousVertexY * scale), min, max);
435
+ decodedData[i] = clamp(Math.round(previousVertexX * scale), min, max);
436
+ decodedData[i + 1] = clamp(Math.round(previousVertexY * scale), min, max);
430
437
  }
438
+ return decodedData;
431
439
  }
432
440
  function clamp(n, min, max) {
433
441
  return Math.min(max, Math.max(min, n));
@@ -461,10 +469,10 @@ export function decodeZigZagRleDeltaInt32(data, numRuns, numTotalValues) {
461
469
  }
462
470
  offset += runLength;
463
471
  }
464
- return new Uint32Array(decodedValues);
472
+ return decodedValues;
465
473
  }
466
474
  export function decodeRleDeltaInt32(data, numRuns, numTotalValues) {
467
- const decodedValues = new Int32Array(numTotalValues + 1);
475
+ const decodedValues = new Uint32Array(numTotalValues + 1);
468
476
  decodedValues[0] = 0;
469
477
  let offset = 1;
470
478
  let previousValue = decodedValues[0];
@@ -477,7 +485,7 @@ export function decodeRleDeltaInt32(data, numRuns, numTotalValues) {
477
485
  }
478
486
  offset += runLength;
479
487
  }
480
- return new Uint32Array(decodedValues);
488
+ return decodedValues;
481
489
  }
482
490
  /**
483
491
  * Decode Delta-RLE with multiple runs by fully reconstructing values.
@@ -520,6 +528,39 @@ export function decodeDeltaRleInt64(data, numRuns, numValues) {
520
528
  }
521
529
  return result;
522
530
  }
531
+ export function decodeUnsignedZigZagDeltaInt32(data) {
532
+ const decodedValues = new Uint32Array(data.length);
533
+ decodedValues[0] = decodeZigZagInt32Value(data[0]) >>> 0;
534
+ for (let i = 1; i < data.length; i++) {
535
+ decodedValues[i] = (decodedValues[i - 1] + decodeZigZagInt32Value(data[i])) >>> 0;
536
+ }
537
+ return decodedValues;
538
+ }
539
+ export function decodeUnsignedZigZagDeltaInt64(data) {
540
+ const decodedValues = new BigUint64Array(data.length);
541
+ decodedValues[0] = BigInt.asUintN(64, decodeZigZagInt64Value(data[0]));
542
+ for (let i = 1; i < data.length; i++) {
543
+ decodedValues[i] = BigInt.asUintN(64, decodedValues[i - 1] + decodeZigZagInt64Value(data[i]));
544
+ }
545
+ return decodedValues;
546
+ }
547
+ export function decodeUnsignedComponentwiseDeltaVec2(data) {
548
+ if (data.length < 2) {
549
+ return new Uint32Array(data);
550
+ }
551
+ const decodedData = new Uint32Array(data.length);
552
+ decodedData[0] = decodeZigZagInt32Value(data[0]) >>> 0;
553
+ decodedData[1] = decodeZigZagInt32Value(data[1]) >>> 0;
554
+ for (let i = 2; i < data.length; i += 2) {
555
+ decodedData[i] = (decodedData[i - 2] + decodeZigZagInt32Value(data[i])) >>> 0;
556
+ decodedData[i + 1] = (decodedData[i - 1] + decodeZigZagInt32Value(data[i + 1])) >>> 0;
557
+ }
558
+ return decodedData;
559
+ }
560
+ export function decodeUnsignedComponentwiseDeltaVec2Scaled(data, scale, min, max) {
561
+ const scaledValues = decodeComponentwiseDeltaVec2Scaled(data, scale, min, max);
562
+ return new Uint32Array(scaledValues);
563
+ }
523
564
  export function decodeUnsignedConstRleInt32(data) {
524
565
  return data[1];
525
566
  }