@maplibre/mlt 1.1.6 → 1.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/decoding/bigEndianDecode.d.ts +13 -0
- package/dist/decoding/bigEndianDecode.js +50 -0
- package/dist/decoding/bigEndianDecode.js.map +1 -0
- package/dist/decoding/decodingTestUtils.d.ts +2 -2
- package/dist/decoding/decodingTestUtils.js +20 -21
- package/dist/decoding/decodingTestUtils.js.map +1 -1
- package/dist/decoding/decodingUtils.js +4 -2
- package/dist/decoding/decodingUtils.js.map +1 -1
- package/dist/decoding/fastPforDecoder.d.ts +47 -0
- package/dist/decoding/fastPforDecoder.js +482 -0
- package/dist/decoding/fastPforDecoder.js.map +1 -0
- package/dist/decoding/fastPforShared.d.ts +7 -0
- package/dist/decoding/fastPforShared.js +29 -0
- package/dist/decoding/fastPforShared.js.map +1 -0
- package/dist/decoding/fastPforUnpack.d.ts +23 -0
- package/dist/decoding/fastPforUnpack.js +910 -0
- package/dist/decoding/fastPforUnpack.js.map +1 -0
- package/dist/decoding/geometryDecoder.d.ts +2 -2
- package/dist/decoding/geometryDecoder.js +52 -49
- package/dist/decoding/geometryDecoder.js.map +1 -1
- package/dist/decoding/intWrapper.js +0 -1
- package/dist/decoding/intWrapper.js.map +1 -1
- package/dist/decoding/integerDecodingUtils.d.ts +33 -25
- package/dist/decoding/integerDecodingUtils.js +115 -52
- package/dist/decoding/integerDecodingUtils.js.map +1 -1
- package/dist/decoding/integerStreamDecoder.d.ts +15 -11
- package/dist/decoding/integerStreamDecoder.js +159 -65
- package/dist/decoding/integerStreamDecoder.js.map +1 -1
- package/dist/decoding/propertyDecoder.js +38 -36
- package/dist/decoding/propertyDecoder.js.map +1 -1
- package/dist/decoding/stringDecoder.js +19 -23
- package/dist/decoding/stringDecoder.js.map +1 -1
- package/dist/decoding/unpackNullableUtils.d.ts +2 -2
- package/dist/decoding/unpackNullableUtils.js.map +1 -1
- package/dist/encoding/bigEndianEncode.d.ts +7 -0
- package/dist/encoding/bigEndianEncode.js +16 -0
- package/dist/encoding/bigEndianEncode.js.map +1 -0
- package/dist/encoding/constGeometryVectorEncoder.d.ts +19 -0
- package/dist/encoding/constGeometryVectorEncoder.js +248 -0
- package/dist/encoding/constGeometryVectorEncoder.js.map +1 -0
- package/dist/encoding/encodingUtils.d.ts +2 -2
- package/dist/encoding/encodingUtils.js +3 -3
- package/dist/encoding/encodingUtils.js.map +1 -1
- package/dist/encoding/fastPforEncoder.d.ts +18 -0
- package/dist/encoding/fastPforEncoder.js +310 -0
- package/dist/encoding/fastPforEncoder.js.map +1 -0
- package/dist/encoding/integerEncodingUtils.d.ts +20 -20
- package/dist/encoding/integerEncodingUtils.js +64 -48
- package/dist/encoding/integerEncodingUtils.js.map +1 -1
- package/dist/encoding/integerStreamEncoder.d.ts +3 -2
- package/dist/encoding/integerStreamEncoder.js +57 -23
- package/dist/encoding/integerStreamEncoder.js.map +1 -1
- package/dist/encoding/packNullableUtils.d.ts +1 -1
- package/dist/encoding/packNullableUtils.js.map +1 -1
- package/dist/encoding/propertyEncoder.d.ts +1 -1
- package/dist/encoding/propertyEncoder.js +17 -24
- package/dist/encoding/propertyEncoder.js.map +1 -1
- package/dist/encoding/stringEncoder.js +9 -42
- package/dist/encoding/stringEncoder.js.map +1 -1
- package/dist/encoding/zOrderCurveEncoder.js +1 -1
- package/dist/encoding/zOrderCurveEncoder.js.map +1 -1
- package/dist/metadata/tile/logicalStreamType.d.ts +8 -12
- package/dist/metadata/tile/logicalStreamType.js +1 -19
- package/dist/metadata/tile/logicalStreamType.js.map +1 -1
- package/dist/metadata/tile/streamMetadataDecoder.d.ts +1 -1
- package/dist/metadata/tile/streamMetadataDecoder.js +9 -4
- package/dist/metadata/tile/streamMetadataDecoder.js.map +1 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.d.ts +1 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.js.map +1 -1
- package/dist/metadata/tileset/typeMap.d.ts +10 -2
- package/dist/metadata/tileset/typeMap.js +25 -15
- package/dist/metadata/tileset/typeMap.js.map +1 -1
- package/dist/mltDecoder.js +46 -47
- package/dist/mltDecoder.js.map +1 -1
- package/dist/mltMetadata.js.map +1 -1
- package/dist/vector/constant/int32ConstVector.d.ts +6 -0
- package/dist/vector/constant/int32ConstVector.js +10 -0
- package/dist/vector/constant/int32ConstVector.js.map +1 -0
- package/dist/vector/constant/int64ConstVector.d.ts +6 -0
- package/dist/vector/constant/int64ConstVector.js +10 -0
- package/dist/vector/constant/int64ConstVector.js.map +1 -0
- package/dist/vector/dictionary/stringDictionaryVector.d.ts +1 -2
- package/dist/vector/dictionary/stringDictionaryVector.js +0 -3
- package/dist/vector/dictionary/stringDictionaryVector.js.map +1 -1
- package/dist/vector/featureTable.d.ts +7 -8
- package/dist/vector/featureTable.js +10 -42
- package/dist/vector/featureTable.js.map +1 -1
- package/dist/vector/filter/flatSelectionVector.d.ts +1 -1
- package/dist/vector/filter/flatSelectionVector.js +0 -2
- package/dist/vector/filter/flatSelectionVector.js.map +1 -1
- package/dist/vector/filter/selectionVectorUtils.d.ts +1 -1
- package/dist/vector/filter/selectionVectorUtils.js.map +1 -1
- package/dist/vector/filter/sequenceSelectionVector.d.ts +1 -1
- package/dist/vector/filter/sequenceSelectionVector.js +1 -5
- package/dist/vector/filter/sequenceSelectionVector.js.map +1 -1
- package/dist/vector/flat/bitVector.js +0 -2
- package/dist/vector/flat/bitVector.js.map +1 -1
- package/dist/vector/flat/booleanFlatVector.js +0 -1
- package/dist/vector/flat/booleanFlatVector.js.map +1 -1
- package/dist/vector/flat/{intFlatVector.d.ts → int32FlatVector.d.ts} +1 -1
- package/dist/vector/flat/{intFlatVector.js → int32FlatVector.js} +2 -2
- package/dist/vector/flat/int32FlatVector.js.map +1 -0
- package/dist/vector/flat/{longFlatVector.d.ts → int64FlatVector.d.ts} +1 -1
- package/dist/vector/flat/{longFlatVector.js → int64FlatVector.js} +2 -2
- package/dist/vector/flat/int64FlatVector.js.map +1 -0
- package/dist/vector/flat/stringFlatVector.d.ts +0 -1
- package/dist/vector/flat/stringFlatVector.js +0 -2
- package/dist/vector/flat/stringFlatVector.js.map +1 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.d.ts +1 -3
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js +0 -42
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.js.map +1 -1
- package/dist/vector/geometry/constGeometryVector.d.ts +5 -5
- package/dist/vector/geometry/constGeometryVector.js +1 -3
- package/dist/vector/geometry/constGeometryVector.js.map +1 -1
- package/dist/vector/geometry/constGpuVector.d.ts +4 -4
- package/dist/vector/geometry/constGpuVector.js +1 -3
- package/dist/vector/geometry/constGpuVector.js.map +1 -1
- package/dist/vector/geometry/flatGeometryVector.d.ts +4 -4
- package/dist/vector/geometry/flatGeometryVector.js +1 -5
- package/dist/vector/geometry/flatGeometryVector.js.map +1 -1
- package/dist/vector/geometry/flatGpuVector.d.ts +3 -3
- package/dist/vector/geometry/flatGpuVector.js +0 -1
- package/dist/vector/geometry/flatGpuVector.js.map +1 -1
- package/dist/vector/geometry/geometryType.js.map +1 -1
- package/dist/vector/geometry/geometryVector.d.ts +7 -8
- package/dist/vector/geometry/geometryVector.js +0 -13
- package/dist/vector/geometry/geometryVector.js.map +1 -1
- package/dist/vector/geometry/geometryVectorConverter.d.ts +1 -1
- package/dist/vector/geometry/geometryVectorConverter.js +167 -211
- package/dist/vector/geometry/geometryVectorConverter.js.map +1 -1
- package/dist/vector/geometry/gpuVector.d.ts +6 -6
- package/dist/vector/geometry/gpuVector.js +0 -4
- package/dist/vector/geometry/gpuVector.js.map +1 -1
- package/dist/vector/geometry/topologyVector.d.ts +5 -9
- package/dist/vector/geometry/topologyVector.js +1 -19
- package/dist/vector/geometry/topologyVector.js.map +1 -1
- package/dist/vector/geometry/vertexBufferType.js.map +1 -1
- package/dist/vector/idVector.d.ts +8 -0
- package/dist/vector/idVector.js +2 -0
- package/dist/vector/idVector.js.map +1 -0
- package/dist/vector/sequence/{intSequenceVector.d.ts → int32SequenceVector.d.ts} +1 -1
- package/dist/vector/sequence/{intSequenceVector.js → int32SequenceVector.js} +2 -2
- package/dist/vector/sequence/int32SequenceVector.js.map +1 -0
- package/dist/vector/sequence/{longSequenceVector.d.ts → int64SequenceVector.d.ts} +1 -1
- package/dist/vector/sequence/{longSequenceVector.js → int64SequenceVector.js} +2 -2
- package/dist/vector/sequence/int64SequenceVector.js.map +1 -0
- package/dist/vector/sequence/sequenceVector.js +0 -1
- package/dist/vector/sequence/sequenceVector.js.map +1 -1
- package/dist/vector/variableSizeVector.js +0 -1
- package/dist/vector/variableSizeVector.js.map +1 -1
- package/dist/vector/vector.js +1 -5
- package/dist/vector/vector.js.map +1 -1
- package/dist/vector/vectorType.js.map +1 -1
- package/package.json +9 -10
- package/dist/decoding/decodingUtils.spec.d.ts +0 -1
- package/dist/decoding/decodingUtils.spec.js +0 -141
- package/dist/decoding/decodingUtils.spec.js.map +0 -1
- package/dist/decoding/fsstDecoder.spec.d.ts +0 -1
- package/dist/decoding/fsstDecoder.spec.js +0 -57
- package/dist/decoding/fsstDecoder.spec.js.map +0 -1
- package/dist/decoding/integerDecodingUtils.spec.d.ts +0 -1
- package/dist/decoding/integerDecodingUtils.spec.js +0 -300
- package/dist/decoding/integerDecodingUtils.spec.js.map +0 -1
- package/dist/decoding/integerStreamDecoder.spec.d.ts +0 -1
- package/dist/decoding/integerStreamDecoder.spec.js +0 -402
- package/dist/decoding/integerStreamDecoder.spec.js.map +0 -1
- package/dist/decoding/propertyDecoder.spec.d.ts +0 -1
- package/dist/decoding/propertyDecoder.spec.js +0 -448
- package/dist/decoding/propertyDecoder.spec.js.map +0 -1
- package/dist/decoding/stringDecoder.spec.d.ts +0 -1
- package/dist/decoding/stringDecoder.spec.js +0 -387
- package/dist/decoding/stringDecoder.spec.js.map +0 -1
- package/dist/decoding/unpackNullableUtils.spec.d.ts +0 -1
- package/dist/decoding/unpackNullableUtils.spec.js +0 -71
- package/dist/decoding/unpackNullableUtils.spec.js.map +0 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.d.ts +0 -1
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js +0 -142
- package/dist/metadata/tileset/embeddedTilesetMetadataDecoder.spec.js.map +0 -1
- package/dist/mltDecoder.spec.d.ts +0 -1
- package/dist/mltDecoder.spec.js +0 -152
- package/dist/mltDecoder.spec.js.map +0 -1
- package/dist/vector/constant/intConstVector.d.ts +0 -6
- package/dist/vector/constant/intConstVector.js +0 -10
- package/dist/vector/constant/intConstVector.js.map +0 -1
- package/dist/vector/constant/longConstVector.d.ts +0 -6
- package/dist/vector/constant/longConstVector.js +0 -10
- package/dist/vector/constant/longConstVector.js.map +0 -1
- package/dist/vector/filter/flatSelectionVector.spec.d.ts +0 -1
- package/dist/vector/filter/flatSelectionVector.spec.js +0 -51
- package/dist/vector/filter/flatSelectionVector.spec.js.map +0 -1
- package/dist/vector/filter/selectionVectorUtil.spec.d.ts +0 -1
- package/dist/vector/filter/selectionVectorUtil.spec.js +0 -154
- package/dist/vector/filter/selectionVectorUtil.spec.js.map +0 -1
- package/dist/vector/filter/sequenceSelectionVector.spec.d.ts +0 -1
- package/dist/vector/filter/sequenceSelectionVector.spec.js +0 -115
- package/dist/vector/filter/sequenceSelectionVector.spec.js.map +0 -1
- package/dist/vector/flat/floatFlatVector.spec.d.ts +0 -1
- package/dist/vector/flat/floatFlatVector.spec.js +0 -14
- package/dist/vector/flat/floatFlatVector.spec.js.map +0 -1
- package/dist/vector/flat/intFlatVector.js.map +0 -1
- package/dist/vector/flat/intFlatVector.spec.d.ts +0 -1
- package/dist/vector/flat/intFlatVector.spec.js +0 -15
- package/dist/vector/flat/intFlatVector.spec.js.map +0 -1
- package/dist/vector/flat/longFlatVector.js.map +0 -1
- package/dist/vector/flat/longFlatVector.spec.d.ts +0 -1
- package/dist/vector/flat/longFlatVector.spec.js +0 -14
- package/dist/vector/flat/longFlatVector.spec.js.map +0 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.d.ts +0 -1
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js +0 -28
- package/dist/vector/fsst-dictionary/stringFsstDictionaryVector.spec.js.map +0 -1
- package/dist/vector/geometry/zOrderCurve.spec.d.ts +0 -1
- package/dist/vector/geometry/zOrderCurve.spec.js +0 -25
- package/dist/vector/geometry/zOrderCurve.spec.js.map +0 -1
- package/dist/vector/intVector.d.ts +0 -8
- package/dist/vector/intVector.js +0 -2
- package/dist/vector/intVector.js.map +0 -1
- package/dist/vector/sequence/intSequenceVector.js.map +0 -1
- package/dist/vector/sequence/longSequenceVector.js.map +0 -1
- package/dist/vector/sequence/longSequenceVektor.spec.d.ts +0 -1
- package/dist/vector/sequence/longSequenceVektor.spec.js +0 -11
- package/dist/vector/sequence/longSequenceVektor.spec.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geometryDecoder.js","sourceRoot":"","sources":["../../src/decoding/geometryDecoder.ts"],"names":[],"mappings":"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","sourcesContent":["import { type GeometryVector, type MortonSettings } from \"../vector/geometry/geometryVector\";\nimport { 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 TopologyVector from \"../vector/geometry/topologyVector\";\nimport {\n ConstGeometryVector,\n createConstGeometryVector,\n createMortonEncodedConstGeometryVector,\n} from \"../vector/geometry/constGeometryVector\";\nimport {\n createFlatGeometryVector,\n createFlatGeometryVectorMortonEncoded,\n FlatGeometryVector,\n} from \"../vector/geometry/flatGeometryVector\";\nimport { OffsetType } from \"../metadata/tile/offsetType\";\nimport { ConstGpuVector, createConstGpuVector } from \"../vector/geometry/constGpuVector\";\nimport { type GpuVector } from \"../vector/geometry/gpuVector\";\nimport { createFlatGpuVector, FlatGpuVector } from \"../vector/geometry/flatGpuVector\";\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 = new 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 new TopologyVector(geometryOffsets, partOffsets, ringOffsets),\n vertexOffsets,\n vertexBuffer,\n )\n : createMortonEncodedConstGeometryVector(\n numFeatures,\n geometryType,\n new TopologyVector(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(\n geometryTypeVector,\n triangleOffsets,\n indexBuffer,\n vertexBuffer,\n new TopologyVector(geometryOffsets, partOffsets, ringOffsets),\n );\n }\n\n return mortonSettings === null /* Currently only 2D coordinates (Vec2) are implemented in the encoder */\n ? createFlatGeometryVector(\n geometryTypeVector,\n new TopologyVector(geometryOffsets, partOffsets, ringOffsets),\n vertexOffsets,\n vertexBuffer,\n )\n : createFlatGeometryVectorMortonEncoded(\n geometryTypeVector,\n new TopologyVector(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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intWrapper.js","sourceRoot":"","sources":["../../src/decoding/intWrapper.ts"],"names":[],"mappings":"AAAA,4HAA4H;AAE5H,MAAM,CAAC,OAAO,OAAO,UAAU;
|
|
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"]}
|
|
@@ -1,30 +1,34 @@
|
|
|
1
1
|
import type IntWrapper from "./intWrapper";
|
|
2
|
-
|
|
3
|
-
export
|
|
2
|
+
import { type FastPforWireDecodeWorkspace } from "./fastPforDecoder";
|
|
3
|
+
export type { FastPforWireDecodeWorkspace } from "./fastPforDecoder";
|
|
4
|
+
export { createFastPforWireDecodeWorkspace } from "./fastPforDecoder";
|
|
5
|
+
export declare function decodeVarintInt32(buf: Uint8Array, bufferOffset: IntWrapper, numValues: number): Uint32Array;
|
|
6
|
+
export declare function decodeVarintInt64(src: Uint8Array, offset: IntWrapper, numValues: number): BigUint64Array;
|
|
4
7
|
export declare function decodeVarintFloat64(src: Uint8Array, offset: IntWrapper, numValues: number): Float64Array;
|
|
5
|
-
export declare function decodeFastPfor(
|
|
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;
|
|
6
10
|
export declare function decodeZigZagInt32Value(encoded: number): number;
|
|
7
11
|
export declare function decodeZigZagInt64Value(encoded: bigint): bigint;
|
|
8
12
|
export declare function decodeZigZagFloat64Value(encoded: number): number;
|
|
9
|
-
export declare function decodeZigZagInt32(encodedData:
|
|
10
|
-
export declare function decodeZigZagInt64(encodedData:
|
|
13
|
+
export declare function decodeZigZagInt32(encodedData: Uint32Array): Int32Array;
|
|
14
|
+
export declare function decodeZigZagInt64(encodedData: BigUint64Array): BigInt64Array;
|
|
11
15
|
export declare function decodeZigZagFloat64(encodedData: Float64Array): void;
|
|
12
|
-
export declare function decodeUnsignedRleInt32(encodedData:
|
|
13
|
-
export declare function decodeUnsignedRleInt64(encodedData:
|
|
16
|
+
export declare function decodeUnsignedRleInt32(encodedData: Uint32Array, numRuns: number, numTotalValues?: number): Uint32Array;
|
|
17
|
+
export declare function decodeUnsignedRleInt64(encodedData: BigUint64Array, numRuns: number, numTotalValues?: number): BigUint64Array;
|
|
14
18
|
export declare function decodeUnsignedRleFloat64(encodedData: Float64Array, numRuns: number, numTotalValues: number): Float64Array;
|
|
15
|
-
export declare function decodeZigZagDeltaInt32(data:
|
|
16
|
-
export declare function decodeZigZagDeltaInt64(data: BigInt64Array):
|
|
19
|
+
export declare function decodeZigZagDeltaInt32(data: Uint32Array): Int32Array;
|
|
20
|
+
export declare function decodeZigZagDeltaInt64(data: BigInt64Array | BigUint64Array): BigInt64Array;
|
|
17
21
|
export declare function decodeZigZagDeltaFloat64(data: Float64Array): void;
|
|
18
|
-
export declare function decodeZigZagRleInt32(data:
|
|
19
|
-
export declare function decodeZigZagRleInt64(data:
|
|
22
|
+
export declare function decodeZigZagRleInt32(data: Uint32Array, numRuns: number, numTotalValues?: number): Int32Array;
|
|
23
|
+
export declare function decodeZigZagRleInt64(data: BigUint64Array, numRuns: number, numTotalValues?: number): BigInt64Array;
|
|
20
24
|
export declare function decodeZigZagRleFloat64(data: Float64Array, numRuns: number, numTotalValues: number): Float64Array;
|
|
21
25
|
export declare function fastInverseDelta(data: Uint32Array | Int32Array): void;
|
|
22
|
-
export declare function inverseDelta(data:
|
|
23
|
-
export declare function decodeComponentwiseDeltaVec2(data:
|
|
24
|
-
export declare function decodeComponentwiseDeltaVec2Scaled(data:
|
|
25
|
-
export declare function decodeZigZagDeltaOfDeltaInt32(data:
|
|
26
|
-
export declare function decodeZigZagRleDeltaInt32(data:
|
|
27
|
-
export declare function decodeRleDeltaInt32(data:
|
|
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;
|
|
28
32
|
/**
|
|
29
33
|
* Decode Delta-RLE with multiple runs by fully reconstructing values.
|
|
30
34
|
*
|
|
@@ -33,14 +37,18 @@ export declare function decodeRleDeltaInt32(data: Int32Array, numRuns: number, n
|
|
|
33
37
|
* @param numValues Total number of values to reconstruct
|
|
34
38
|
* @returns Reconstructed values with deltas applied
|
|
35
39
|
*/
|
|
36
|
-
export declare function decodeDeltaRleInt32(data:
|
|
40
|
+
export declare function decodeDeltaRleInt32(data: Uint32Array, numRuns: number, numValues: number): Int32Array;
|
|
37
41
|
/**
|
|
38
42
|
* Decode Delta-RLE with multiple runs for 64-bit integers.
|
|
39
43
|
*/
|
|
40
|
-
export declare function decodeDeltaRleInt64(data:
|
|
41
|
-
export declare function
|
|
42
|
-
export declare function
|
|
43
|
-
export declare function
|
|
44
|
-
export declare function
|
|
45
|
-
export declare function
|
|
46
|
-
export declare function
|
|
44
|
+
export declare function decodeDeltaRleInt64(data: BigUint64Array, numRuns: number, numValues: number): BigInt64Array;
|
|
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];
|
|
52
|
+
export declare function decodeUnsignedConstRleInt64(data: BigInt64Array | BigUint64Array): bigint;
|
|
53
|
+
export declare function decodeZigZagConstRleInt64(data: BigInt64Array | BigUint64Array): bigint;
|
|
54
|
+
export declare function decodeZigZagSequenceRleInt64(data: BigInt64Array | BigUint64Array): [baseValue: bigint, delta: bigint];
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { createFastPforWireDecodeWorkspace, decodeFastPforInt32, ensureFastPforWireEncodedWordsCapacity, } from "./fastPforDecoder";
|
|
2
|
+
import { decodeBigEndianInt32sInto } from "./bigEndianDecode";
|
|
3
|
+
export { createFastPforWireDecodeWorkspace } from "./fastPforDecoder";
|
|
1
4
|
//based on https://github.com/mapbox/pbf/blob/main/index.js
|
|
2
5
|
export function decodeVarintInt32(buf, bufferOffset, numValues) {
|
|
3
|
-
const dst = new
|
|
6
|
+
const dst = new Uint32Array(numValues);
|
|
4
7
|
let dstOffset = 0;
|
|
5
8
|
let offset = bufferOffset.get();
|
|
6
9
|
for (let i = 0; i < dst.length; i++) {
|
|
@@ -36,7 +39,7 @@ export function decodeVarintInt32(buf, bufferOffset, numValues) {
|
|
|
36
39
|
return dst;
|
|
37
40
|
}
|
|
38
41
|
export function decodeVarintInt64(src, offset, numValues) {
|
|
39
|
-
const dst = new
|
|
42
|
+
const dst = new BigUint64Array(numValues);
|
|
40
43
|
for (let i = 0; i < dst.length; i++) {
|
|
41
44
|
dst[i] = decodeVarintInt64Value(src, offset);
|
|
42
45
|
}
|
|
@@ -74,7 +77,8 @@ export function decodeVarintFloat64(src, offset, numValues) {
|
|
|
74
77
|
}
|
|
75
78
|
//based on https://github.com/mapbox/pbf/blob/main/index.js
|
|
76
79
|
function decodeVarintFloat64Value(buf, offset) {
|
|
77
|
-
let val
|
|
80
|
+
let val;
|
|
81
|
+
let b;
|
|
78
82
|
b = buf[offset.get()];
|
|
79
83
|
offset.increment();
|
|
80
84
|
val = b & 0x7f;
|
|
@@ -100,7 +104,8 @@ function decodeVarintFloat64Value(buf, offset) {
|
|
|
100
104
|
return decodeVarintRemainder(val, buf, offset);
|
|
101
105
|
}
|
|
102
106
|
function decodeVarintRemainder(l, buf, offset) {
|
|
103
|
-
let h
|
|
107
|
+
let h;
|
|
108
|
+
let b;
|
|
104
109
|
b = buf[offset.get()];
|
|
105
110
|
offset.increment();
|
|
106
111
|
h = (b & 0x70) >> 4;
|
|
@@ -133,8 +138,21 @@ function decodeVarintRemainder(l, buf, offset) {
|
|
|
133
138
|
return h * 0x100000000 + (l >>> 0);
|
|
134
139
|
throw new Error("Expected varint not more than 10 bytes");
|
|
135
140
|
}
|
|
136
|
-
export function decodeFastPfor(
|
|
137
|
-
|
|
141
|
+
export function decodeFastPfor(encodedBytes, expectedValueCount, encodedByteLength, offset) {
|
|
142
|
+
const workspace = createFastPforWireDecodeWorkspace(encodedByteLength >>> 2);
|
|
143
|
+
return decodeFastPforWithWorkspace(encodedBytes, expectedValueCount, encodedByteLength, offset, workspace);
|
|
144
|
+
}
|
|
145
|
+
export function decodeFastPforWithWorkspace(encodedBytes, expectedValueCount, encodedByteLength, offset, workspace) {
|
|
146
|
+
const inputByteOffset = offset.get();
|
|
147
|
+
if ((encodedByteLength & 3) !== 0) {
|
|
148
|
+
throw new Error(`FastPFOR: invalid encodedByteLength=${encodedByteLength} at offset=${inputByteOffset} (encodedBytes.length=${encodedBytes.length}; expected a multiple of 4 bytes for an int32 big-endian word stream)`);
|
|
149
|
+
}
|
|
150
|
+
const encodedWordCount = encodedByteLength >>> 2;
|
|
151
|
+
const encodedWordBuffer = ensureFastPforWireEncodedWordsCapacity(workspace, encodedWordCount);
|
|
152
|
+
decodeBigEndianInt32sInto(encodedBytes, inputByteOffset, encodedByteLength, encodedWordBuffer);
|
|
153
|
+
const decodedValues = decodeFastPforInt32(encodedWordBuffer.subarray(0, encodedWordCount), expectedValueCount, workspace.decoderWorkspace);
|
|
154
|
+
offset.add(encodedByteLength);
|
|
155
|
+
return decodedValues;
|
|
138
156
|
}
|
|
139
157
|
export function decodeZigZagInt32Value(encoded) {
|
|
140
158
|
return (encoded >>> 1) ^ -(encoded & 1);
|
|
@@ -146,14 +164,18 @@ export function decodeZigZagFloat64Value(encoded) {
|
|
|
146
164
|
return encoded % 2 === 1 ? (encoded + 1) / -2 : encoded / 2;
|
|
147
165
|
}
|
|
148
166
|
export function decodeZigZagInt32(encodedData) {
|
|
167
|
+
const decodedValues = new Int32Array(encodedData.length);
|
|
149
168
|
for (let i = 0; i < encodedData.length; i++) {
|
|
150
|
-
|
|
169
|
+
decodedValues[i] = decodeZigZagInt32Value(encodedData[i]);
|
|
151
170
|
}
|
|
171
|
+
return decodedValues;
|
|
152
172
|
}
|
|
153
173
|
export function decodeZigZagInt64(encodedData) {
|
|
174
|
+
const decodedValues = new BigInt64Array(encodedData.length);
|
|
154
175
|
for (let i = 0; i < encodedData.length; i++) {
|
|
155
|
-
|
|
176
|
+
decodedValues[i] = decodeZigZagInt64Value(encodedData[i]);
|
|
156
177
|
}
|
|
178
|
+
return decodedValues;
|
|
157
179
|
}
|
|
158
180
|
export function decodeZigZagFloat64(encodedData) {
|
|
159
181
|
for (let i = 0; i < encodedData.length; i++) {
|
|
@@ -168,7 +190,7 @@ export function decodeUnsignedRleInt32(encodedData, numRuns, numTotalValues) {
|
|
|
168
190
|
numTotalValues += encodedData[i];
|
|
169
191
|
}
|
|
170
192
|
}
|
|
171
|
-
const decodedValues = new
|
|
193
|
+
const decodedValues = new Uint32Array(numTotalValues);
|
|
172
194
|
let offset = 0;
|
|
173
195
|
for (let i = 0; i < numRuns; i++) {
|
|
174
196
|
const runLength = encodedData[i];
|
|
@@ -186,7 +208,7 @@ export function decodeUnsignedRleInt64(encodedData, numRuns, numTotalValues) {
|
|
|
186
208
|
numTotalValues += Number(encodedData[i]);
|
|
187
209
|
}
|
|
188
210
|
}
|
|
189
|
-
const decodedValues = new
|
|
211
|
+
const decodedValues = new BigUint64Array(numTotalValues);
|
|
190
212
|
let offset = 0;
|
|
191
213
|
for (let i = 0; i < numRuns; i++) {
|
|
192
214
|
const runLength = Number(encodedData[i]);
|
|
@@ -212,7 +234,8 @@ export function decodeUnsignedRleFloat64(encodedData, numRuns, numTotalValues) {
|
|
|
212
234
|
* Inspired by https://github.com/lemire/JavaFastPFOR/blob/master/src/main/java/me/lemire/integercompression/differential/Delta.java
|
|
213
235
|
*/
|
|
214
236
|
export function decodeZigZagDeltaInt32(data) {
|
|
215
|
-
|
|
237
|
+
const decodedValues = new Int32Array(data.length);
|
|
238
|
+
decodedValues[0] = decodeZigZagInt32Value(data[0]);
|
|
216
239
|
const sz0 = (data.length / 4) * 4;
|
|
217
240
|
let i = 1;
|
|
218
241
|
if (sz0 >= 4) {
|
|
@@ -221,18 +244,20 @@ export function decodeZigZagDeltaInt32(data) {
|
|
|
221
244
|
const data2 = data[i + 1];
|
|
222
245
|
const data3 = data[i + 2];
|
|
223
246
|
const data4 = data[i + 3];
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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];
|
|
228
251
|
}
|
|
229
252
|
}
|
|
230
|
-
for (; i
|
|
231
|
-
|
|
253
|
+
for (; i !== data.length; ++i) {
|
|
254
|
+
decodedValues[i] = decodeZigZagInt32Value(data[i]) + decodedValues[i - 1];
|
|
232
255
|
}
|
|
256
|
+
return decodedValues;
|
|
233
257
|
}
|
|
234
258
|
export function decodeZigZagDeltaInt64(data) {
|
|
235
|
-
|
|
259
|
+
const decodedValues = new BigInt64Array(data.length);
|
|
260
|
+
decodedValues[0] = decodeZigZagInt64Value(data[0]);
|
|
236
261
|
const sz0 = (data.length / 4) * 4;
|
|
237
262
|
let i = 1;
|
|
238
263
|
if (sz0 >= 4) {
|
|
@@ -241,15 +266,16 @@ export function decodeZigZagDeltaInt64(data) {
|
|
|
241
266
|
const data2 = data[i + 1];
|
|
242
267
|
const data3 = data[i + 2];
|
|
243
268
|
const data4 = data[i + 3];
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
269
|
+
decodedValues[i] = decodeZigZagInt64Value(data1) + decodedValues[i - 1];
|
|
270
|
+
decodedValues[i + 1] = decodeZigZagInt64Value(data2) + decodedValues[i];
|
|
271
|
+
decodedValues[i + 2] = decodeZigZagInt64Value(data3) + decodedValues[i + 1];
|
|
272
|
+
decodedValues[i + 3] = decodeZigZagInt64Value(data4) + decodedValues[i + 2];
|
|
248
273
|
}
|
|
249
274
|
}
|
|
250
|
-
for (; i
|
|
251
|
-
|
|
275
|
+
for (; i !== decodedValues.length; ++i) {
|
|
276
|
+
decodedValues[i] = decodeZigZagInt64Value(data[i]) + decodedValues[i - 1];
|
|
252
277
|
}
|
|
278
|
+
return decodedValues;
|
|
253
279
|
}
|
|
254
280
|
export function decodeZigZagDeltaFloat64(data) {
|
|
255
281
|
data[0] = decodeZigZagFloat64Value(data[0]);
|
|
@@ -267,7 +293,7 @@ export function decodeZigZagDeltaFloat64(data) {
|
|
|
267
293
|
data[i + 3] = decodeZigZagFloat64Value(data4) + data[i + 2];
|
|
268
294
|
}
|
|
269
295
|
}
|
|
270
|
-
for (; i
|
|
296
|
+
for (; i !== data.length; ++i) {
|
|
271
297
|
data[i] = decodeZigZagFloat64Value(data[i]) + data[i - 1];
|
|
272
298
|
}
|
|
273
299
|
}
|
|
@@ -335,7 +361,7 @@ export function fastInverseDelta(data) {
|
|
|
335
361
|
a = data[i + 3] += a;
|
|
336
362
|
}
|
|
337
363
|
}
|
|
338
|
-
while (i
|
|
364
|
+
while (i !== data.length) {
|
|
339
365
|
data[i] += data[i - 1];
|
|
340
366
|
++i;
|
|
341
367
|
}
|
|
@@ -353,9 +379,10 @@ export function inverseDelta(data) {
|
|
|
353
379
|
*/
|
|
354
380
|
export function decodeComponentwiseDeltaVec2(data) {
|
|
355
381
|
if (data.length < 2)
|
|
356
|
-
return;
|
|
357
|
-
|
|
358
|
-
|
|
382
|
+
return new Int32Array(data);
|
|
383
|
+
const decodedData = new Int32Array(data.length);
|
|
384
|
+
decodedData[0] = decodeZigZagInt32Value(data[0]);
|
|
385
|
+
decodedData[1] = decodeZigZagInt32Value(data[1]);
|
|
359
386
|
const sz0 = (data.length / 4) * 4;
|
|
360
387
|
let i = 2;
|
|
361
388
|
if (sz0 >= 4) {
|
|
@@ -364,24 +391,26 @@ export function decodeComponentwiseDeltaVec2(data) {
|
|
|
364
391
|
const y1 = data[i + 1];
|
|
365
392
|
const x2 = data[i + 2];
|
|
366
393
|
const y2 = data[i + 3];
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
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];
|
|
371
398
|
}
|
|
372
399
|
}
|
|
373
|
-
for (; i
|
|
374
|
-
|
|
375
|
-
|
|
400
|
+
for (; i !== data.length; i += 2) {
|
|
401
|
+
decodedData[i] = decodeZigZagInt32Value(data[i]) + decodedData[i - 2];
|
|
402
|
+
decodedData[i + 1] = decodeZigZagInt32Value(data[i + 1]) + decodedData[i - 1];
|
|
376
403
|
}
|
|
404
|
+
return decodedData;
|
|
377
405
|
}
|
|
378
406
|
export function decodeComponentwiseDeltaVec2Scaled(data, scale, min, max) {
|
|
379
407
|
if (data.length < 2)
|
|
380
|
-
return;
|
|
408
|
+
return new Int32Array(data);
|
|
409
|
+
const decodedData = new Int32Array(data.length);
|
|
381
410
|
let previousVertexX = decodeZigZagInt32Value(data[0]);
|
|
382
411
|
let previousVertexY = decodeZigZagInt32Value(data[1]);
|
|
383
|
-
|
|
384
|
-
|
|
412
|
+
decodedData[0] = clamp(Math.round(previousVertexX * scale), min, max);
|
|
413
|
+
decodedData[1] = clamp(Math.round(previousVertexY * scale), min, max);
|
|
385
414
|
const sz0 = data.length / 16;
|
|
386
415
|
let i = 2;
|
|
387
416
|
if (sz0 >= 4) {
|
|
@@ -390,22 +419,23 @@ export function decodeComponentwiseDeltaVec2Scaled(data, scale, min, max) {
|
|
|
390
419
|
const y1 = data[i + 1];
|
|
391
420
|
const currentVertexX = decodeZigZagInt32Value(x1) + previousVertexX;
|
|
392
421
|
const currentVertexY = decodeZigZagInt32Value(y1) + previousVertexY;
|
|
393
|
-
|
|
394
|
-
|
|
422
|
+
decodedData[i] = clamp(Math.round(currentVertexX * scale), min, max);
|
|
423
|
+
decodedData[i + 1] = clamp(Math.round(currentVertexY * scale), min, max);
|
|
395
424
|
const x2 = data[i + 2];
|
|
396
425
|
const y2 = data[i + 3];
|
|
397
426
|
previousVertexX = decodeZigZagInt32Value(x2) + currentVertexX;
|
|
398
427
|
previousVertexY = decodeZigZagInt32Value(y2) + currentVertexY;
|
|
399
|
-
|
|
400
|
-
|
|
428
|
+
decodedData[i + 2] = clamp(Math.round(previousVertexX * scale), min, max);
|
|
429
|
+
decodedData[i + 3] = clamp(Math.round(previousVertexY * scale), min, max);
|
|
401
430
|
}
|
|
402
431
|
}
|
|
403
|
-
for (; i
|
|
432
|
+
for (; i !== data.length; i += 2) {
|
|
404
433
|
previousVertexX += decodeZigZagInt32Value(data[i]);
|
|
405
434
|
previousVertexY += decodeZigZagInt32Value(data[i + 1]);
|
|
406
|
-
|
|
407
|
-
|
|
435
|
+
decodedData[i] = clamp(Math.round(previousVertexX * scale), min, max);
|
|
436
|
+
decodedData[i + 1] = clamp(Math.round(previousVertexY * scale), min, max);
|
|
408
437
|
}
|
|
438
|
+
return decodedData;
|
|
409
439
|
}
|
|
410
440
|
function clamp(n, min, max) {
|
|
411
441
|
return Math.min(max, Math.max(min, n));
|
|
@@ -416,7 +446,7 @@ export function decodeZigZagDeltaOfDeltaInt32(data) {
|
|
|
416
446
|
decodedData[0] = 0;
|
|
417
447
|
decodedData[1] = decodeZigZagInt32Value(data[0]);
|
|
418
448
|
let deltaSum = decodedData[1];
|
|
419
|
-
for (let i = 2; i
|
|
449
|
+
for (let i = 2; i !== decodedData.length; ++i) {
|
|
420
450
|
const zigZagValue = data[i - 1];
|
|
421
451
|
const delta = decodeZigZagInt32Value(zigZagValue);
|
|
422
452
|
deltaSum += delta;
|
|
@@ -439,10 +469,10 @@ export function decodeZigZagRleDeltaInt32(data, numRuns, numTotalValues) {
|
|
|
439
469
|
}
|
|
440
470
|
offset += runLength;
|
|
441
471
|
}
|
|
442
|
-
return
|
|
472
|
+
return decodedValues;
|
|
443
473
|
}
|
|
444
474
|
export function decodeRleDeltaInt32(data, numRuns, numTotalValues) {
|
|
445
|
-
const decodedValues = new
|
|
475
|
+
const decodedValues = new Uint32Array(numTotalValues + 1);
|
|
446
476
|
decodedValues[0] = 0;
|
|
447
477
|
let offset = 1;
|
|
448
478
|
let previousValue = decodedValues[0];
|
|
@@ -455,7 +485,7 @@ export function decodeRleDeltaInt32(data, numRuns, numTotalValues) {
|
|
|
455
485
|
}
|
|
456
486
|
offset += runLength;
|
|
457
487
|
}
|
|
458
|
-
return
|
|
488
|
+
return decodedValues;
|
|
459
489
|
}
|
|
460
490
|
/**
|
|
461
491
|
* Decode Delta-RLE with multiple runs by fully reconstructing values.
|
|
@@ -498,6 +528,39 @@ export function decodeDeltaRleInt64(data, numRuns, numValues) {
|
|
|
498
528
|
}
|
|
499
529
|
return result;
|
|
500
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
|
+
}
|
|
501
564
|
export function decodeUnsignedConstRleInt32(data) {
|
|
502
565
|
return data[1];
|
|
503
566
|
}
|
|
@@ -506,7 +569,7 @@ export function decodeZigZagConstRleInt32(data) {
|
|
|
506
569
|
}
|
|
507
570
|
export function decodeZigZagSequenceRleInt32(data) {
|
|
508
571
|
/* base value and delta value are equal */
|
|
509
|
-
if (data.length
|
|
572
|
+
if (data.length === 2) {
|
|
510
573
|
const value = decodeZigZagInt32Value(data[1]);
|
|
511
574
|
return [value, value];
|
|
512
575
|
}
|
|
@@ -523,7 +586,7 @@ export function decodeZigZagConstRleInt64(data) {
|
|
|
523
586
|
}
|
|
524
587
|
export function decodeZigZagSequenceRleInt64(data) {
|
|
525
588
|
/* base value and delta value are equal */
|
|
526
|
-
if (data.length
|
|
589
|
+
if (data.length === 2) {
|
|
527
590
|
const value = decodeZigZagInt64Value(data[1]);
|
|
528
591
|
return [value, value];
|
|
529
592
|
}
|