| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- class DataSlice {
- constructor(arrayBuffer, sliceOffset, littleEndian, bigTiff) {
- this._dataView = new DataView(arrayBuffer);
- this._sliceOffset = sliceOffset;
- this._littleEndian = littleEndian;
- this._bigTiff = bigTiff;
- }
- get sliceOffset() {
- return this._sliceOffset;
- }
- get sliceTop() {
- return this._sliceOffset + this.buffer.byteLength;
- }
- get littleEndian() {
- return this._littleEndian;
- }
- get bigTiff() {
- return this._bigTiff;
- }
- get buffer() {
- return this._dataView.buffer;
- }
- covers(offset, length) {
- return this.sliceOffset <= offset && this.sliceTop >= offset + length;
- }
- readUint8(offset) {
- return this._dataView.getUint8(offset - this._sliceOffset, this._littleEndian);
- }
- readInt8(offset) {
- return this._dataView.getInt8(offset - this._sliceOffset, this._littleEndian);
- }
- readUint16(offset) {
- return this._dataView.getUint16(offset - this._sliceOffset, this._littleEndian);
- }
- readInt16(offset) {
- return this._dataView.getInt16(offset - this._sliceOffset, this._littleEndian);
- }
- readUint32(offset) {
- return this._dataView.getUint32(offset - this._sliceOffset, this._littleEndian);
- }
- readInt32(offset) {
- return this._dataView.getInt32(offset - this._sliceOffset, this._littleEndian);
- }
- readFloat32(offset) {
- return this._dataView.getFloat32(offset - this._sliceOffset, this._littleEndian);
- }
- readFloat64(offset) {
- return this._dataView.getFloat64(offset - this._sliceOffset, this._littleEndian);
- }
- readUint64(offset) {
- const left = this.readUint32(offset);
- const right = this.readUint32(offset + 4);
- let combined;
- if (this._littleEndian) {
- combined = left + ((2 ** 32) * right);
- if (!Number.isSafeInteger(combined)) {
- throw new Error(`${combined} exceeds MAX_SAFE_INTEGER. `
- + 'Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues');
- }
- return combined;
- }
- combined = ((2 ** 32) * left) + right;
- if (!Number.isSafeInteger(combined)) {
- throw new Error(`${combined} exceeds MAX_SAFE_INTEGER. `
- + 'Precision may be lost. Please report if you get this message to https://github.com/geotiffjs/geotiff.js/issues');
- }
- return combined;
- }
- // adapted from https://stackoverflow.com/a/55338384/8060591
- readInt64(offset) {
- let value = 0;
- const isNegative = (this._dataView.getUint8(offset + (this._littleEndian ? 7 : 0)) & 0x80)
- > 0;
- let carrying = true;
- for (let i = 0; i < 8; i++) {
- let byte = this._dataView.getUint8(offset + (this._littleEndian ? i : 7 - i));
- if (isNegative) {
- if (carrying) {
- if (byte !== 0x00) {
- byte = ~(byte - 1) & 0xff;
- carrying = false;
- }
- }
- else {
- byte = ~byte & 0xff;
- }
- }
- value += byte * (256 ** i);
- }
- if (isNegative) {
- value = -value;
- }
- return value;
- }
- readOffset(offset) {
- if (this._bigTiff) {
- return this.readUint64(offset);
- }
- return this.readUint32(offset);
- }
- }
- exports.default = DataSlice;
- //# sourceMappingURL=dataslice.js.map
|