supercat666's picture
add igv
78c921d
raw
history blame
5.54 kB
"use strict";
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.AsyncRandomAccessFile = exports.RandomAccessFile = void 0;
const tslib_1 = require("tslib");
const stream_js_1 = require("./stream.js");
const buffer_js_1 = require("../util/buffer.js");
/** @ignore */
class RandomAccessFile extends stream_js_1.ByteStream {
constructor(buffer, byteLength) {
super();
this.position = 0;
this.buffer = (0, buffer_js_1.toUint8Array)(buffer);
this.size = typeof byteLength === 'undefined' ? this.buffer.byteLength : byteLength;
}
readInt32(position) {
const { buffer, byteOffset } = this.readAt(position, 4);
return new DataView(buffer, byteOffset).getInt32(0, true);
}
seek(position) {
this.position = Math.min(position, this.size);
return position < this.size;
}
read(nBytes) {
const { buffer, size, position } = this;
if (buffer && position < size) {
if (typeof nBytes !== 'number') {
nBytes = Number.POSITIVE_INFINITY;
}
this.position = Math.min(size, position + Math.min(size - position, nBytes));
return buffer.subarray(position, this.position);
}
return null;
}
readAt(position, nBytes) {
const buf = this.buffer;
const end = Math.min(this.size, position + nBytes);
return buf ? buf.subarray(position, end) : new Uint8Array(nBytes);
}
close() { this.buffer && (this.buffer = null); }
throw(value) { this.close(); return { done: true, value }; }
return(value) { this.close(); return { done: true, value }; }
}
exports.RandomAccessFile = RandomAccessFile;
/** @ignore */
class AsyncRandomAccessFile extends stream_js_1.AsyncByteStream {
constructor(file, byteLength) {
super();
this.position = 0;
this._handle = file;
if (typeof byteLength === 'number') {
this.size = byteLength;
}
else {
this._pending = (() => tslib_1.__awaiter(this, void 0, void 0, function* () {
this.size = (yield file.stat()).size;
delete this._pending;
}))();
}
}
readInt32(position) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const { buffer, byteOffset } = yield this.readAt(position, 4);
return new DataView(buffer, byteOffset).getInt32(0, true);
});
}
seek(position) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
this._pending && (yield this._pending);
this.position = Math.min(position, this.size);
return position < this.size;
});
}
read(nBytes) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
this._pending && (yield this._pending);
const { _handle: file, size, position } = this;
if (file && position < size) {
if (typeof nBytes !== 'number') {
nBytes = Number.POSITIVE_INFINITY;
}
let pos = position, offset = 0, bytesRead = 0;
const end = Math.min(size, pos + Math.min(size - pos, nBytes));
const buffer = new Uint8Array(Math.max(0, (this.position = end) - pos));
while ((pos += bytesRead) < end && (offset += bytesRead) < buffer.byteLength) {
({ bytesRead } = yield file.read(buffer, offset, buffer.byteLength - offset, pos));
}
return buffer;
}
return null;
});
}
readAt(position, nBytes) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
this._pending && (yield this._pending);
const { _handle: file, size } = this;
if (file && (position + nBytes) < size) {
const end = Math.min(size, position + nBytes);
const buffer = new Uint8Array(end - position);
return (yield file.read(buffer, 0, nBytes, position)).buffer;
}
return new Uint8Array(nBytes);
});
}
close() {
return tslib_1.__awaiter(this, void 0, void 0, function* () { const f = this._handle; this._handle = null; f && (yield f.close()); });
}
throw(value) {
return tslib_1.__awaiter(this, void 0, void 0, function* () { yield this.close(); return { done: true, value }; });
}
return(value) {
return tslib_1.__awaiter(this, void 0, void 0, function* () { yield this.close(); return { done: true, value }; });
}
}
exports.AsyncRandomAccessFile = AsyncRandomAccessFile;
//# sourceMappingURL=file.js.map