scichart
Version:
Fast WebGL JavaScript Charting Library and Framework
119 lines (118 loc) • 4.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.appendDoubleVectorFromBuffer = exports.appendDoubleVectorFromJsArray = exports.memCopyFloat32 = exports.insertDoubleVectorFromJsArray = exports.SIZEOF_FLOAT32 = exports.SIZEOF_NUMBER = void 0;
var Guard_1 = require("../../Core/Guard");
var logger_1 = require("../logger");
exports.SIZEOF_NUMBER = 8;
exports.SIZEOF_FLOAT32 = 4;
/**
* Inserts the values from the source Js array into the destination wasm array (and resizes) at index destIndex
* @param wasmContext
* @param source
* @param dest
* @param destIndex
*/
function insertDoubleVectorFromJsArray(wasmContext, source, dest, destIndex) {
// Sanity checks
Guard_1.Guard.notNull(wasmContext, "wasmContext");
Guard_1.Guard.notNull(source, "source");
Guard_1.Guard.notNull(dest, "dest");
Guard_1.Guard.isTrue(destIndex >= 0, "destIndex must be greater than or equal to zero");
Guard_1.Guard.isTrue(destIndex <= dest.size(), "destIndex must be less than or equal to dest.size()");
var count = source.length;
if (count === 0)
return;
var beforeSize = dest.size();
// Resize the dest vector to fit memory
dest.resizeFast(beforeSize + count);
// Shift memory up for the insert
if (destIndex < beforeSize) {
wasmContext.SCRTMemMove(dest.dataPtr(destIndex + count), // Dest
dest.dataPtr(destIndex), // Src
(beforeSize - destIndex) * exports.SIZEOF_NUMBER); // count in bytes
}
// Overwrite dest memory with Js array
// @ts-ignore
wasmContext.HEAPF64.set(source, dest.dataPtr(destIndex) / exports.SIZEOF_NUMBER);
}
exports.insertDoubleVectorFromJsArray = insertDoubleVectorFromJsArray;
/**
* Copies the values from the source Js array into the destination wasm array (and resizes) at index destIndex
* @param wasmContext
* @param source
* @param dest
* @param destIndex
*/
function memCopyFloat32(wasmContext, source, dest, destIndex) {
// Sanity checks
Guard_1.Guard.notNull(wasmContext, "wasmContext");
Guard_1.Guard.notNull(source, "source");
Guard_1.Guard.notNull(dest, "dest");
Guard_1.Guard.isTrue(destIndex >= 0, "destIndex must be greater than or equal to zero");
Guard_1.Guard.isTrue(destIndex <= dest.size() + source.length, "destIndex must be less than or equal to dest.size() + source.Length");
var count = source.length;
if (count === 0)
return;
// Overwrite dest memory with Js array
// @ts-ignore
wasmContext.HEAPF32.set(source, dest.dataPtr(destIndex) / exports.SIZEOF_FLOAT32);
}
exports.memCopyFloat32 = memCopyFloat32;
/**
* Resizes the destinationVector by jsArray.length and copies the values into it
* @param wasmContext
* @param destinationVector
* @param jsArray
*/
function appendDoubleVectorFromJsArray(wasmContext, destinationVector, jsArray) {
var vectorSize = destinationVector.size();
var arraySize = jsArray.length;
var startPosition = vectorSize;
var endPosition = startPosition + arraySize;
try {
// Resize without initializing values
destinationVector.resizeFast(endPosition);
}
catch (error) {
throw new Error(
// @ts-ignore
"Out of memory exception. Heap size: ".concat(wasmContext.HEAPF64.buffer.byteLength / (1024 * 1024), " mb"),
// @ts-ignore
error);
}
// Get pointer to destination
var bufferPointer = destinationVector.dataPtr(startPosition);
// HEAPF64.set copies js array into buffer pointer
// @ts-ignore
wasmContext.HEAPF64.set(jsArray, bufferPointer / exports.SIZEOF_NUMBER);
}
exports.appendDoubleVectorFromJsArray = appendDoubleVectorFromJsArray;
/**
* Resizes the destinationVector and copies the values into it
* @param wasmContext
* @param destinationVector
* @param jsArray
* @param experimentalMethod
*/
function appendDoubleVectorFromBuffer(wasmContext, destinationVector, jsArray) {
try {
var vectorSize = destinationVector.size();
var arraySize = jsArray.byteLength / Float64Array.BYTES_PER_ELEMENT;
var startPosition = vectorSize;
var endPosition = startPosition + arraySize;
// Resize without initializing values
destinationVector.resizeFast(endPosition);
// Get pointer to destination
var bufferPointer = destinationVector.dataPtr(startPosition);
// HEAPF64.set copies the provided ArrayBuffer data into buffer pointer
// @ts-ignore
var heap = wasmContext.HEAPF64;
// @ts-ignore
heap.set(jsArray, bufferPointer / exports.SIZEOF_NUMBER);
}
catch (e) {
logger_1.Logger.log("Append Error", e);
throw e;
}
}
exports.appendDoubleVectorFromBuffer = appendDoubleVectorFromBuffer;