package htsjdk.samtools.cram.paralell;
import java.util.concurrent.PriorityBlockingQueue;
final class OrderingConveyer<O extends IOrder> extends Conveyer<O> {
private long order = 0;
public OrderingConveyer() {
super(new PriorityBlockingQueue<O>(), 0);
}
@Override
public O tryAdvance() throws InterruptedException {
O bb = queue.peek();
if (bb == null || bb.order() > order) {
return null;
}
if (bb.order() == order) {
queue.take();
order++;
counter.incrementAndGet();
return bb;
}
throw new RuntimeException(String.format("Expecting order %d but got ", order, bb.order()));
}
}