1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
package stream;
import java.util.ArrayList;
import fileIO.FileFormat;
import fileIO.ReadWrite;
import structures.ListNum;
/**
* Wraps a cris to allow single-read next() capability, and the ability to go back.
* @author Brian Bushnell
* @date Jul 18, 2014
*
*/
public class CrisWrapper {
public CrisWrapper(long maxReads, boolean keepSamHeader, FileFormat ff1, FileFormat ff2){
this(maxReads, keepSamHeader, ff1, ff2, (String)null, (String)null);
}
public CrisWrapper(long maxReads, boolean keepSamHeader, FileFormat ff1, FileFormat ff2, String qf1, String qf2){
this(ConcurrentReadInputStream.getReadInputStream(maxReads, ff1.samOrBam(), ff1, ff2, qf1, qf2), true);
}
public CrisWrapper(ConcurrentReadInputStream cris_, boolean start){
initialize(cris_, start);
}
public void initialize(ConcurrentReadInputStream cris_, boolean start){
cris=cris_;
if(start){cris.start();}
ln=cris.nextList();
reads=(ln==null ? null : ln.list);
if(reads==null || reads.size()==0){
reads=null;
//System.err.println("Empty.");
cris.returnList(ln.id, true);
errorState|=ReadWrite.closeStream(cris);
}
index=0;
//System.err.println("Initialized.");
}
public Read next(){
//System.err.println("*******1");
Read r=null;
if(reads==null || index>=reads.size()){
//System.err.println("*******2");
if(reads==null){return null;}
index=0;
if(reads.size()==0){
reads=null;
cris.returnList(ln.id, true);
errorState|=ReadWrite.closeStream(cris);
return null;
}
cris.returnList(ln.id, false);
ln=cris.nextList();
reads=(ln!=null ? ln.list : null);
if(reads==null){
//System.err.println("*******3");
cris.returnList(ln.id, true);
errorState|=ReadWrite.closeStream(cris);
//System.err.println("Returning null (2)");
return null;
}
}
//System.err.println("*******4");
if(index<reads.size()){
//System.err.println("*******5");
r=reads.get(index);
index++;
}else{
//System.err.println("*******6");
//System.err.println("Recalling");
return next();
}
//System.err.println("*******7");
//System.err.println("Returning "+(r==null ? "null" : r.id));
return r;
}
public void goBack(){
assert(index>0);
index--;
}
private ListNum<Read> ln;
private ArrayList<Read> reads;
private int index;
public ConcurrentReadInputStream cris;
public boolean errorState=false;
}
|