package htsjdk.samtools; import htsjdk.samtools.util.CloseableIterator; import htsjdk.samtools.util.PeekIterator; /** * Wrapper around SAMRecord iterator that skips over secondary and supplementary elements. * This iterator conflates a filtering iterator and a peekable iterator. It would be cleaner to * handle those concerns separately. This class should be viewed as a replacement for NotPrimarySkippingIterator, * in that we did not want to change the functionality of NPSI to no longer match its name */ public class SecondaryOrSupplementarySkippingIterator { private final PeekIterator<SAMRecord> it; public SecondaryOrSupplementarySkippingIterator(final CloseableIterator<SAMRecord> underlyingIt) { it = new PeekIterator<SAMRecord>(underlyingIt); skipAnyNotprimary(); } public boolean hasCurrent() { return it.hasNext(); } public SAMRecord getCurrent() { assert(hasCurrent()); return it.peek(); } public boolean advance() { it.next(); skipAnyNotprimary(); return hasCurrent(); } private void skipAnyNotprimary() { while (it.hasNext() && it.peek().isSecondaryOrSupplementary()) { it.next(); } } }