itk-wasm
Version:
High-performance spatial analysis in a web browser, Node.js, and reproducible execution across programming languages and hardware architectures.
38 lines (34 loc) • 1.1 kB
text/typescript
const haveSharedArrayBuffer = typeof globalThis.SharedArrayBuffer !== 'undefined' // eslint-disable-line
function getTransferables (data?: any[] | null, noCopy?: boolean): ArrayBuffer[] {
if (data === undefined || data === null) {
return []
}
const transferables: ArrayBuffer[] = []
for (let i = 0; i < data.length; i++) {
const transferable = getTransferable(data[i], noCopy)
if (transferable !== null) {
transferables.push(transferable)
}
}
return transferables
}
function getTransferable (data?: any, noCopy?: boolean): ArrayBuffer | null {
if (data === undefined || data === null) {
return null
}
let result: null | ArrayBuffer = null
if (data.buffer !== undefined) {
result = data.buffer as ArrayBuffer
} else if (data.byteLength !== undefined) {
result = data as ArrayBuffer
}
if (haveSharedArrayBuffer && result instanceof SharedArrayBuffer) { // eslint-disable-line
return null
}
// eslint-disable-next-line
if (noCopy) {
return result
}
return (result as ArrayBuffer).slice(0)
}
export default getTransferables