package htsjdk.samtools; import java.io.File; import java.util.NoSuchElementException; /** * A truncated form of a SAMFileReader that iterates over a limited number of records. * * @author mccowan@broadinstitute.org */ public class SAMFileTruncatedReader extends SAMFileReader { private class TruncatedIterator implements SAMRecordIterator { final SAMRecordIterator i; final long max; long currentRecord = 0; TruncatedIterator(final SAMRecordIterator i, final long max) { this.i = i; this.max = max; } public boolean hasNext() { return i.hasNext() && max != currentRecord; } public SAMRecord next() { if (this.hasNext()) { currentRecord += 1; return i.next(); } else { throw new NoSuchElementException(); } } public void remove() { i.remove(); } public void close() { i.close(); } public SAMRecordIterator assertSorted(final SAMFileHeader.SortOrder sortOrder) { return i.assertSorted(sortOrder); } } private final long maxRecordsToIterate; /** * @param input The SAM file * @param max The maximum number of records to read from the file via iterator() methods */ public SAMFileTruncatedReader(final File input, final long max) { super(input); this.maxRecordsToIterate = max; } @Override public SAMRecordIterator iterator() { return new TruncatedIterator(super.iterator(), maxRecordsToIterate); } @Override public SAMRecordIterator iterator(final SAMFileSpan chunks) { return new TruncatedIterator(super.iterator(chunks), maxRecordsToIterate); } }