whole_func_string: function readAlignmentsToEnd(buffer: ArrayBuffer,
                               refName: string,
                               idxRange: ContigInterval<number>,
                               contained: boolean,
                               offset: VirtualOffset,
                               blocks: InflatedBlock[],
                               alignments: SamRead[]) {
    // We use jDataView and ArrayBuffer directly for a speedup over jBinary.
    // This parses reads ~2-3x faster than using ThinAlignment directly.
    var jv = new jDataView(buffer, 0, buffer.byteLength, true /* little endian */);
    var shouldAbort = false;
    var pos = 0;
    offset = offset.clone();
    var blockIndex = 0;
    try {
      while (pos < buffer.byteLength) {
        var readData = readAlignment(jv, pos, offset, refName);
        if (!readData) break;
  
        var {read, readLength} = readData;
        pos += readLength;
        if (isAlignmentInRange(read, idxRange, contained)) {
          alignments.push(read);
        }
  
        // Advance the VirtualOffset to reflect the new position
        offset.uoffset += readLength;
        var bufLen = blocks[blockIndex].buffer.byteLength;
        if (offset.uoffset >= bufLen) {
          offset.uoffset -= bufLen;
          offset.coffset += blocks[blockIndex].compressedLength;
          blockIndex++;
        }
  
        // Optimization: if the last alignment started after the requested range,
        // then no other chunks can possibly contain matching alignments.
        // TODO: use contigInterval.isAfterInterval when that's possible.
        var range = new ContigInterval(read.refID, read.pos, read.pos + 1);
        if (range.contig > idxRange.contig ||
            (range.contig == idxRange.contig && range.start() > idxRange.stop())) {
          shouldAbort = true;
          break;
        }
      }
      // Code gets here if the compression block ended exactly at the end of
      // an Alignment.
    } catch (e) {
      // Partial record
      if (!(e instanceof RangeError)) {
        throw e;
      }
    }
  
    return {
      shouldAbort,
      nextOffset: offset
    };
  }
func_code_string: function readAlignmentsToEnd(buffer: ArrayBuffer,
                               refName: string,
                               idxRange: ContigInterval<number>,
                               contained: boolean,
                               offset: VirtualOffset,
                               blocks: InflatedBlock[],
                               alignments: SamRead[]) {
    // We use jDataView and ArrayBuffer directly for a speedup over jBinary.
    // This parses reads ~2-3x faster than using ThinAlignment directly.
    var jv = new jDataView(buffer, 0, buffer.byteLength, true /* little endian */);
    var shouldAbort = false;
    var pos = 0;
    offset = offset.clone();
    var blockIndex = 0;
    try {
      while (pos < buffer.byteLength) {
        var readData = readAlignment(jv, pos, offset, refName);
        if (!readData) break;
  
        var {read, readLength} = readData;
        pos += readLength;
        if (isAlignmentInRange(read, idxRange, contained)) {
          alignments.push(read);
        }
  
        // Advance the VirtualOffset to reflect the new position
        offset.uoffset += readLength;
        var bufLen = blocks[blockIndex].buffer.byteLength;
        if (offset.uoffset >= bufLen) {
          offset.uoffset -= bufLen;
          offset.coffset += blocks[blockIndex].compressedLength;
          blockIndex++;
        }
  
        // Optimization: if the last alignment started after the requested range,
        // then no other chunks can possibly contain matching alignments.
        // TODO: use contigInterval.isAfterInterval when that's possible.
        var range = new ContigInterval(read.refID, read.pos, read.pos + 1);
        if (range.contig > idxRange.contig ||
            (range.contig == idxRange.contig && range.start() > idxRange.stop())) {
          shouldAbort = true;
          break;
        }
      }
      // Code gets here if the compression block ended exactly at the end of
      // an Alignment.
    } catch (e) {
      // Partial record
      if (!(e instanceof RangeError)) {
        throw e;
      }
    }
  
    return {
      shouldAbort,
      nextOffset: offset
    };
  }
func_documentation_string: This tracks how many bytes were read.