@bare-ts/lib
Version:
TypeScript library for BARE, a compact and simple binary-serialization format
94 lines (93 loc) • 2.67 kB
JavaScript
;
import { check, reserve } from "../core/byte-cursor.js";
import { DEV, assert } from "../util/assert.js";
import { IS_LITTLE_ENDIAN_PLATFORM } from "../util/constants.js";
import { isU32 } from "../util/validator.js";
import { readFixedData } from "./data.js";
import {
readF32,
readF64,
readUintSafe32,
writeF32,
writeF64,
writeUintSafe32
} from "./primitive.js";
import { writeU8FixedArray } from "./u8-array.js";
export const readF32FixedArray = IS_LITTLE_ENDIAN_PLATFORM ? readF32FixedArrayLe : readF32FixedArrayBe;
function readF32FixedArrayLe(bc, len) {
if (DEV) {
assert(isU32(len));
}
const byteLen = len * 4;
const result = new Float32Array(readFixedData(bc, byteLen));
return result;
}
function readF32FixedArrayBe(bc, len) {
if (DEV) {
assert(isU32(len));
}
check(bc, len * 4);
const result = new Float32Array(len);
for (let i = 0; i < len; i++) {
result[i] = readF32(bc);
}
return result;
}
export const writeF32FixedArray = IS_LITTLE_ENDIAN_PLATFORM ? writeF32FixedArrayLe : writeF32FixedArrayBe;
function writeF32FixedArrayLe(bc, x) {
writeU8FixedArray(bc, new Uint8Array(x.buffer, x.byteOffset, x.byteLength));
}
function writeF32FixedArrayBe(bc, val) {
reserve(bc, val.length * 4);
for (let i = 0; i < val.length; i++) {
writeF32(bc, val[i]);
}
}
export function readF32Array(bc) {
return readF32FixedArray(bc, readUintSafe32(bc));
}
export function writeF32Array(bc, x) {
writeUintSafe32(bc, x.length);
if (x.length !== 0) {
writeF32FixedArray(bc, x);
}
}
export const readF64FixedArray = IS_LITTLE_ENDIAN_PLATFORM ? readF64FixedArrayLe : readF64FixedArrayBe;
function readF64FixedArrayLe(bc, len) {
if (DEV) {
assert(isU32(len));
}
const byteLen = len * 8;
const result = new Float64Array(readFixedData(bc, byteLen));
return result;
}
function readF64FixedArrayBe(bc, len) {
if (DEV) {
assert(isU32(len));
}
check(bc, len * 8);
const result = new Float64Array(len);
for (let i = 0; i < len; i++) {
result[i] = readF64(bc);
}
return result;
}
export const writeF64FixedArray = IS_LITTLE_ENDIAN_PLATFORM ? writeF64FixedArrayLe : writeF64FixedArrayBe;
function writeF64FixedArrayLe(bc, x) {
writeU8FixedArray(bc, new Uint8Array(x.buffer, x.byteOffset, x.byteLength));
}
function writeF64FixedArrayBe(bc, x) {
reserve(bc, x.length * 8);
for (let i = 0; i < x.length; i++) {
writeF64(bc, x[i]);
}
}
export function readF64Array(bc) {
return readF64FixedArray(bc, readUintSafe32(bc));
}
export function writeF64Array(bc, x) {
writeUintSafe32(bc, x.length);
if (x.length !== 0) {
writeF64FixedArray(bc, x);
}
}