mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-29 00:30:02 +00:00
[JS/TS] Rewrite flexbuffers JS to TS (#6148)
* Partial TS rewrite * Completed port but bugs remain * Expose builder function * Break out and fix stack-value and formatting
This commit is contained in:
64
ts/flexbuffers/value-type-util.ts
Normal file
64
ts/flexbuffers/value-type-util.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
import { ValueType } from './value-type'
|
||||
|
||||
export function isInline(value: ValueType): boolean {
|
||||
return value === ValueType.BOOL
|
||||
|| value <= ValueType.FLOAT;
|
||||
}
|
||||
|
||||
export function isNumber(value: ValueType): boolean {
|
||||
return value >= ValueType.INT
|
||||
&& value <= ValueType.FLOAT;
|
||||
}
|
||||
|
||||
export function isIndirectNumber(value: ValueType): boolean {
|
||||
return value >= ValueType.INDIRECT_INT
|
||||
&& value <= ValueType.INDIRECT_FLOAT;
|
||||
}
|
||||
|
||||
export function isTypedVectorElement(value: ValueType): boolean {
|
||||
return value === ValueType.BOOL
|
||||
|| (value >= ValueType.INT
|
||||
&& value <= ValueType.STRING);
|
||||
}
|
||||
|
||||
export function isTypedVector(value: ValueType): boolean {
|
||||
return value === ValueType.VECTOR_BOOL
|
||||
|| (value >= ValueType.VECTOR_INT
|
||||
&& value <= ValueType.VECTOR_STRING_DEPRECATED);
|
||||
}
|
||||
|
||||
export function isFixedTypedVector(value: ValueType): boolean {
|
||||
return value >= ValueType.VECTOR_INT2
|
||||
&& value <= ValueType.VECTOR_FLOAT4;
|
||||
}
|
||||
|
||||
export function isAVector(value: ValueType): boolean {
|
||||
return isTypedVector(value)
|
||||
|| isFixedTypedVector(value)
|
||||
|| value === ValueType.VECTOR;
|
||||
}
|
||||
|
||||
export function toTypedVector(valueType: ValueType, length: number): ValueType {
|
||||
if (length === 0) return valueType - ValueType.INT + ValueType.VECTOR_INT;
|
||||
if (length === 2) return valueType - ValueType.INT + ValueType.VECTOR_INT2;
|
||||
if (length === 3) return valueType - ValueType.INT + ValueType.VECTOR_INT3;
|
||||
if (length === 4) return valueType - ValueType.INT + ValueType.VECTOR_INT4;
|
||||
throw "Unexpected length " + length;
|
||||
}
|
||||
|
||||
export function typedVectorElementType(valueType: ValueType): ValueType {
|
||||
return valueType - ValueType.VECTOR_INT + ValueType.INT;
|
||||
}
|
||||
|
||||
export function fixedTypedVectorElementType(valueType: ValueType): ValueType {
|
||||
return ((valueType - ValueType.VECTOR_INT2) % 3) + ValueType.INT;
|
||||
}
|
||||
|
||||
export function fixedTypedVectorElementSize(valueType: ValueType): ValueType {
|
||||
// The x / y >> 0 trick is to have an int division. Suppose to be faster than Math.floor()
|
||||
return (((valueType - ValueType.VECTOR_INT2) / 3) >> 0) + 2;
|
||||
}
|
||||
|
||||
export function packedType(valueType: ValueType, bitWidth: number): ValueType {
|
||||
return bitWidth | (valueType << 2);
|
||||
}
|
||||
Reference in New Issue
Block a user