Initial commit
This commit is contained in:
132
node_modules/@maplibre/mlt/dist/decoding/propertyDecoder.js
generated
vendored
Normal file
132
node_modules/@maplibre/mlt/dist/decoding/propertyDecoder.js
generated
vendored
Normal file
@@ -0,0 +1,132 @@
|
||||
import { ScalarType } from "../metadata/tileset/tilesetMetadata";
|
||||
import BitVector from "../vector/flat/bitVector";
|
||||
import { decodeStreamMetadata } from "../metadata/tile/streamMetadataDecoder";
|
||||
import { VectorType } from "../vector/vectorType";
|
||||
import { BooleanFlatVector } from "../vector/flat/booleanFlatVector";
|
||||
import { DoubleFlatVector } from "../vector/flat/doubleFlatVector";
|
||||
import { FloatFlatVector } from "../vector/flat/floatFlatVector";
|
||||
import { Int64ConstVector } from "../vector/constant/int64ConstVector";
|
||||
import { Int64FlatVector } from "../vector/flat/int64FlatVector";
|
||||
import { Int32FlatVector } from "../vector/flat/int32FlatVector";
|
||||
import { Int32ConstVector } from "../vector/constant/int32ConstVector";
|
||||
import { decodeBooleanRle, decodeDoublesLE, decodeFloatsLE, skipColumn } from "./decodingUtils";
|
||||
import { decodeSignedConstInt32Stream, decodeSignedConstInt64Stream, decodeSignedInt32Stream, decodeSignedInt64Stream, decodeUnsignedInt32Stream, decodeUnsignedConstInt32Stream, decodeUnsignedConstInt64Stream, decodeUnsignedInt64Stream, decodeSequenceInt32Stream, decodeSequenceInt64Stream, getVectorType, } from "./integerStreamDecoder";
|
||||
import { Int32SequenceVector } from "../vector/sequence/int32SequenceVector";
|
||||
import { Int64SequenceVector } from "../vector/sequence/int64SequenceVector";
|
||||
import { decodeSharedDictionary, decodeString } from "./stringDecoder";
|
||||
export function decodePropertyColumn(data, offset, columnMetadata, numStreams, numFeatures, propertyColumnNames) {
|
||||
if (columnMetadata.type === "scalarType") {
|
||||
if (propertyColumnNames && !propertyColumnNames.has(columnMetadata.name)) {
|
||||
skipColumn(numStreams, data, offset);
|
||||
return null;
|
||||
}
|
||||
return decodeScalarPropertyColumn(numStreams, data, offset, numFeatures, columnMetadata.scalarType, columnMetadata);
|
||||
}
|
||||
if (numStreams === 0) {
|
||||
return null;
|
||||
}
|
||||
return decodeSharedDictionary(data, offset, columnMetadata, numFeatures, propertyColumnNames);
|
||||
}
|
||||
function decodeScalarPropertyColumn(numStreams, data, offset, numFeatures, column, columnMetadata) {
|
||||
let nullabilityBuffer = null;
|
||||
if (numStreams === 0) {
|
||||
return null;
|
||||
}
|
||||
if (columnMetadata.nullable) {
|
||||
const presentStreamMetadata = decodeStreamMetadata(data, offset);
|
||||
const numValues = presentStreamMetadata.numValues;
|
||||
const streamDataStart = offset.get();
|
||||
const presentVector = decodeBooleanRle(data, numValues, presentStreamMetadata.byteLength, offset);
|
||||
offset.set(streamDataStart + presentStreamMetadata.byteLength);
|
||||
nullabilityBuffer = new BitVector(presentVector, presentStreamMetadata.numValues);
|
||||
}
|
||||
const sizeOrNullabilityBuffer = nullabilityBuffer ?? numFeatures;
|
||||
const scalarType = column.physicalType;
|
||||
switch (scalarType) {
|
||||
case ScalarType.UINT_32:
|
||||
case ScalarType.INT_32:
|
||||
return decodeInt32Column(data, offset, columnMetadata, column, sizeOrNullabilityBuffer);
|
||||
case ScalarType.STRING: {
|
||||
// In embedded format: numStreams includes nullability stream if column is nullable
|
||||
const stringDataStreams = columnMetadata.nullable ? numStreams - 1 : numStreams;
|
||||
return decodeString(columnMetadata.name, data, offset, stringDataStreams, nullabilityBuffer);
|
||||
}
|
||||
case ScalarType.BOOLEAN:
|
||||
return decodeBooleanColumn(data, offset, columnMetadata, numFeatures, sizeOrNullabilityBuffer);
|
||||
case ScalarType.UINT_64:
|
||||
case ScalarType.INT_64:
|
||||
return decodeInt64Column(data, offset, columnMetadata, sizeOrNullabilityBuffer, column);
|
||||
case ScalarType.FLOAT:
|
||||
return decodeFloatColumn(data, offset, columnMetadata, sizeOrNullabilityBuffer);
|
||||
case ScalarType.DOUBLE:
|
||||
return decodeDoubleColumn(data, offset, columnMetadata, sizeOrNullabilityBuffer);
|
||||
default:
|
||||
throw new Error(`The specified data type for the field is currently not supported: ${column}`);
|
||||
}
|
||||
}
|
||||
function decodeBooleanColumn(data, offset, column, _numFeatures, sizeOrNullabilityBuffer) {
|
||||
const dataStreamMetadata = decodeStreamMetadata(data, offset);
|
||||
const numValues = dataStreamMetadata.numValues;
|
||||
const streamDataStart = offset.get();
|
||||
const nullabilityBuffer = isNullabilityBuffer(sizeOrNullabilityBuffer) ? sizeOrNullabilityBuffer : undefined;
|
||||
const dataStream = decodeBooleanRle(data, numValues, dataStreamMetadata.byteLength, offset, nullabilityBuffer);
|
||||
offset.set(streamDataStart + dataStreamMetadata.byteLength);
|
||||
const dataVector = new BitVector(dataStream, numValues);
|
||||
return new BooleanFlatVector(column.name, dataVector, sizeOrNullabilityBuffer);
|
||||
}
|
||||
function decodeFloatColumn(data, offset, column, sizeOrNullabilityBuffer) {
|
||||
const dataStreamMetadata = decodeStreamMetadata(data, offset);
|
||||
const nullabilityBuffer = isNullabilityBuffer(sizeOrNullabilityBuffer) ? sizeOrNullabilityBuffer : undefined;
|
||||
const dataStream = decodeFloatsLE(data, offset, dataStreamMetadata.numValues, nullabilityBuffer);
|
||||
return new FloatFlatVector(column.name, dataStream, sizeOrNullabilityBuffer);
|
||||
}
|
||||
function decodeDoubleColumn(data, offset, column, sizeOrNullabilityBuffer) {
|
||||
const dataStreamMetadata = decodeStreamMetadata(data, offset);
|
||||
const nullabilityBuffer = isNullabilityBuffer(sizeOrNullabilityBuffer) ? sizeOrNullabilityBuffer : undefined;
|
||||
const dataStream = decodeDoublesLE(data, offset, dataStreamMetadata.numValues, nullabilityBuffer);
|
||||
return new DoubleFlatVector(column.name, dataStream, sizeOrNullabilityBuffer);
|
||||
}
|
||||
function decodeInt64Column(data, offset, column, sizeOrNullabilityBuffer, scalarColumn) {
|
||||
const dataStreamMetadata = decodeStreamMetadata(data, offset);
|
||||
const vectorType = getVectorType(dataStreamMetadata, sizeOrNullabilityBuffer, data, offset, "int64");
|
||||
const isSigned = scalarColumn.physicalType === ScalarType.INT_64;
|
||||
if (vectorType === VectorType.FLAT) {
|
||||
const nullabilityBuffer = isNullabilityBuffer(sizeOrNullabilityBuffer) ? sizeOrNullabilityBuffer : undefined;
|
||||
const dataStream = isSigned
|
||||
? decodeSignedInt64Stream(data, offset, dataStreamMetadata, nullabilityBuffer)
|
||||
: decodeUnsignedInt64Stream(data, offset, dataStreamMetadata, nullabilityBuffer);
|
||||
return new Int64FlatVector(column.name, dataStream, sizeOrNullabilityBuffer);
|
||||
}
|
||||
if (vectorType === VectorType.SEQUENCE) {
|
||||
const id = decodeSequenceInt64Stream(data, offset, dataStreamMetadata);
|
||||
return new Int64SequenceVector(column.name, id[0], id[1], dataStreamMetadata.numRleValues);
|
||||
}
|
||||
const constValue = isSigned
|
||||
? decodeSignedConstInt64Stream(data, offset, dataStreamMetadata)
|
||||
: decodeUnsignedConstInt64Stream(data, offset, dataStreamMetadata);
|
||||
return new Int64ConstVector(column.name, constValue, sizeOrNullabilityBuffer, isSigned);
|
||||
}
|
||||
function decodeInt32Column(data, offset, column, scalarColumn, sizeOrNullabilityBuffer) {
|
||||
const dataStreamMetadata = decodeStreamMetadata(data, offset);
|
||||
const vectorType = getVectorType(dataStreamMetadata, sizeOrNullabilityBuffer, data, offset);
|
||||
const isSigned = scalarColumn.physicalType === ScalarType.INT_32;
|
||||
if (vectorType === VectorType.FLAT) {
|
||||
const nullabilityBuffer = isNullabilityBuffer(sizeOrNullabilityBuffer) ? sizeOrNullabilityBuffer : undefined;
|
||||
const dataStream = isSigned
|
||||
? decodeSignedInt32Stream(data, offset, dataStreamMetadata, undefined, nullabilityBuffer)
|
||||
: decodeUnsignedInt32Stream(data, offset, dataStreamMetadata, undefined, nullabilityBuffer);
|
||||
return new Int32FlatVector(column.name, dataStream, sizeOrNullabilityBuffer);
|
||||
}
|
||||
if (vectorType === VectorType.SEQUENCE) {
|
||||
const id = decodeSequenceInt32Stream(data, offset, dataStreamMetadata);
|
||||
return new Int32SequenceVector(column.name, id[0], id[1], dataStreamMetadata.numRleValues);
|
||||
}
|
||||
const constValue = isSigned
|
||||
? decodeSignedConstInt32Stream(data, offset, dataStreamMetadata)
|
||||
: decodeUnsignedConstInt32Stream(data, offset, dataStreamMetadata);
|
||||
return new Int32ConstVector(column.name, constValue, sizeOrNullabilityBuffer, isSigned);
|
||||
}
|
||||
function isNullabilityBuffer(sizeOrNullabilityBuffer) {
|
||||
return sizeOrNullabilityBuffer instanceof BitVector;
|
||||
}
|
||||
//# sourceMappingURL=propertyDecoder.js.map
|
||||
Reference in New Issue
Block a user