UNPKG

molstar

Version:

A comprehensive macromolecular library.

86 lines (85 loc) 4.49 kB
/** * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> * @author David Sehnal <david.sehnal@gmail.com> */ import { defaults } from '../../mol-util'; export var SimpleBuffer; (function (SimpleBuffer) { function fromUint8Array(array) { const dv = new DataView(array.buffer); return Object.assign(array.subarray(0), { readInt8: (offset) => dv.getInt8(offset), readUInt8: (offset) => dv.getUint8(offset), writeInt8: (value, offset) => dv.setInt8(offset, value), writeUInt8: (value, offset) => dv.setUint8(offset, value), readInt16LE: (offset) => dv.getInt16(offset, true), readInt32LE: (offset) => dv.getInt32(offset, true), readUInt16LE: (offset) => dv.getUint16(offset, true), readUInt32LE: (offset) => dv.getUint32(offset, true), readFloatLE: (offset) => dv.getFloat32(offset, true), readDoubleLE: (offset) => dv.getFloat64(offset, true), writeInt16LE: (value, offset) => dv.setInt16(offset, value, true), writeInt32LE: (value, offset) => dv.setInt32(offset, value, true), writeUInt16LE: (value, offset) => dv.setUint16(offset, value, true), writeUInt32LE: (value, offset) => dv.setUint32(offset, value, true), writeFloatLE: (value, offset) => dv.setFloat32(offset, value, true), writeDoubleLE: (value, offset) => dv.setFloat64(offset, value, true), readInt16BE: (offset) => dv.getInt16(offset, false), readInt32BE: (offset) => dv.getInt32(offset, false), readUInt16BE: (offset) => dv.getUint16(offset, false), readUInt32BE: (offset) => dv.getUint32(offset, false), readFloatBE: (offset) => dv.getFloat32(offset, false), readDoubleBE: (offset) => dv.getFloat64(offset, false), writeInt16BE: (value, offset) => dv.setInt16(offset, value, false), writeInt32BE: (value, offset) => dv.setInt32(offset, value, false), writeUInt16BE: (value, offset) => dv.setUint16(offset, value, false), writeUInt32BE: (value, offset) => dv.setUint32(offset, value, false), writeFloatBE: (value, offset) => dv.setFloat32(offset, value, false), writeDoubleBE: (value, offset) => dv.setFloat64(offset, value, false), copy: (targetBuffer, targetStart, sourceStart, sourceEnd) => { targetStart = defaults(targetStart, 0); sourceStart = defaults(sourceStart, 0); sourceEnd = defaults(sourceEnd, array.length); targetBuffer.set(array.subarray(sourceStart, sourceEnd), targetStart); return sourceEnd - sourceStart; } }); } SimpleBuffer.fromUint8Array = fromUint8Array; function fromArrayBuffer(arrayBuffer) { return fromUint8Array(new Uint8Array(arrayBuffer)); } SimpleBuffer.fromArrayBuffer = fromArrayBuffer; function fromBuffer(buffer) { return buffer; } SimpleBuffer.fromBuffer = fromBuffer; SimpleBuffer.IsNativeEndianLittle = new Uint16Array(new Uint8Array([0x12, 0x34]).buffer)[0] === 0x3412; /** source and target can't be the same */ function flipByteOrder(source, target, byteCount, elementByteSize, offset) { for (let i = 0, n = byteCount; i < n; i += elementByteSize) { for (let j = 0; j < elementByteSize; j++) { target[offset + i + elementByteSize - j - 1] = source[offset + i + j]; } } } SimpleBuffer.flipByteOrder = flipByteOrder; function flipByteOrderInPlace2(buffer, byteOffset = 0, length) { const intView = new Int16Array(buffer, byteOffset, length); for (let i = 0, n = intView.length; i < n; ++i) { const val = intView[i]; intView[i] = ((val & 0xff) << 8) | ((val >> 8) & 0xff); } } SimpleBuffer.flipByteOrderInPlace2 = flipByteOrderInPlace2; function ensureLittleEndian(source, target, byteCount, elementByteSize, offset) { if (SimpleBuffer.IsNativeEndianLittle) return; if (!byteCount || elementByteSize <= 1) return; flipByteOrder(source, target, byteCount, elementByteSize, offset); } SimpleBuffer.ensureLittleEndian = ensureLittleEndian; })(SimpleBuffer || (SimpleBuffer = {}));