molstar
Version:
A comprehensive macromolecular library.
87 lines • 5.17 kB
JavaScript
/**
* 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) {
var dv = new DataView(array.buffer);
return Object.assign(array.subarray(0), {
readInt8: function (offset) { return dv.getInt8(offset); },
readUInt8: function (offset) { return dv.getUint8(offset); },
writeInt8: function (value, offset) { return dv.setInt8(offset, value); },
writeUInt8: function (value, offset) { return dv.setUint8(offset, value); },
readInt16LE: function (offset) { return dv.getInt16(offset, true); },
readInt32LE: function (offset) { return dv.getInt32(offset, true); },
readUInt16LE: function (offset) { return dv.getUint16(offset, true); },
readUInt32LE: function (offset) { return dv.getUint32(offset, true); },
readFloatLE: function (offset) { return dv.getFloat32(offset, true); },
readDoubleLE: function (offset) { return dv.getFloat64(offset, true); },
writeInt16LE: function (value, offset) { return dv.setInt16(offset, value, true); },
writeInt32LE: function (value, offset) { return dv.setInt32(offset, value, true); },
writeUInt16LE: function (value, offset) { return dv.setUint16(offset, value, true); },
writeUInt32LE: function (value, offset) { return dv.setUint32(offset, value, true); },
writeFloatLE: function (value, offset) { return dv.setFloat32(offset, value, true); },
writeDoubleLE: function (value, offset) { return dv.setFloat64(offset, value, true); },
readInt16BE: function (offset) { return dv.getInt16(offset, false); },
readInt32BE: function (offset) { return dv.getInt32(offset, false); },
readUInt16BE: function (offset) { return dv.getUint16(offset, false); },
readUInt32BE: function (offset) { return dv.getUint32(offset, false); },
readFloatBE: function (offset) { return dv.getFloat32(offset, false); },
readDoubleBE: function (offset) { return dv.getFloat64(offset, false); },
writeInt16BE: function (value, offset) { return dv.setInt16(offset, value, false); },
writeInt32BE: function (value, offset) { return dv.setInt32(offset, value, false); },
writeUInt16BE: function (value, offset) { return dv.setUint16(offset, value, false); },
writeUInt32BE: function (value, offset) { return dv.setUint32(offset, value, false); },
writeFloatBE: function (value, offset) { return dv.setFloat32(offset, value, false); },
writeDoubleBE: function (value, offset) { return dv.setFloat64(offset, value, false); },
copy: function (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 (var i = 0, n = byteCount; i < n; i += elementByteSize) {
for (var j = 0; j < elementByteSize; j++) {
target[offset + i + elementByteSize - j - 1] = source[offset + i + j];
}
}
}
SimpleBuffer.flipByteOrder = flipByteOrder;
function flipByteOrderInPlace2(buffer, byteOffset, length) {
if (byteOffset === void 0) { byteOffset = 0; }
var intView = new Int16Array(buffer, byteOffset, length);
for (var i = 0, n = intView.length; i < n; ++i) {
var 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 = {}));
//# sourceMappingURL=simple-buffer.js.map