nl_tokens: This tracks how many bytes were read .
pl_tokens: function readAlignmentsToEnd ( buffer : ArrayBuffer , refName : <mask> , 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 } ; }