jpayne@68: package kmer; jpayne@68: jpayne@68: import java.util.concurrent.atomic.AtomicLong; jpayne@68: jpayne@68: import fileIO.ByteStreamWriter; jpayne@68: import structures.ByteBuilder; jpayne@68: jpayne@68: /** jpayne@68: * @author Brian Bushnell jpayne@68: * @date Oct 22, 2013 jpayne@68: * jpayne@68: */ jpayne@68: public class KmerNode1D extends KmerNode { jpayne@68: jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: /*---------------- Initialization ----------------*/ jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: jpayne@68: public KmerNode1D(long pivot_){ jpayne@68: super(pivot_); jpayne@68: } jpayne@68: jpayne@68: public KmerNode1D(long pivot_, int value_){ jpayne@68: super(pivot_); jpayne@68: value=value_; jpayne@68: } jpayne@68: jpayne@68: @Override jpayne@68: public final KmerNode makeNode(long pivot_, int value_){ jpayne@68: return new KmerNode1D(pivot_, value_); jpayne@68: } jpayne@68: jpayne@68: @Override jpayne@68: public final KmerNode makeNode(long pivot_, int[] values_, int vlen){ jpayne@68: throw new RuntimeException("Unimplemented"); jpayne@68: } jpayne@68: jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: /*---------------- Public Methods ----------------*/ jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: jpayne@68: @Override jpayne@68: public final int set(long kmer, int[] vals, int vlen) { jpayne@68: throw new RuntimeException("Unimplemented."); jpayne@68: } jpayne@68: jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: /*---------------- Nonpublic Methods ----------------*/ jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: jpayne@68: @Override jpayne@68: public int value(){return value;} jpayne@68: jpayne@68: @Override jpayne@68: protected int[] values(int[] singleton){ jpayne@68: assert(singleton.length==1); jpayne@68: singleton[0]=value; jpayne@68: return singleton; jpayne@68: } jpayne@68: jpayne@68: @Override jpayne@68: public int set(int value_){return value=value_;} jpayne@68: jpayne@68: @Override jpayne@68: protected int set(int[] values_, int vlen){ jpayne@68: throw new RuntimeException("Unimplemented"); jpayne@68: } jpayne@68: jpayne@68: @Override jpayne@68: int numValues(){return value<1 ? 0 : 1;} jpayne@68: jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: /*---------------- Private Methods ----------------*/ jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: /*---------------- Resizing and Rebalancing ----------------*/ jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: jpayne@68: @Override jpayne@68: boolean canResize() { jpayne@68: return false; jpayne@68: } jpayne@68: jpayne@68: @Override jpayne@68: public boolean canRebalance() { jpayne@68: return true; jpayne@68: } jpayne@68: jpayne@68: @Deprecated jpayne@68: @Override jpayne@68: public int arrayLength() { jpayne@68: throw new RuntimeException("Unsupported."); jpayne@68: } jpayne@68: jpayne@68: @Deprecated jpayne@68: @Override jpayne@68: void resize() { jpayne@68: throw new RuntimeException("Unsupported."); jpayne@68: } jpayne@68: jpayne@68: @Deprecated jpayne@68: @Override jpayne@68: public void rebalance() { jpayne@68: throw new RuntimeException("Please call rebalance(ArrayList) instead, with an empty list."); jpayne@68: } jpayne@68: jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: /*---------------- Info Dumping ----------------*/ jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: jpayne@68: @Override jpayne@68: public final boolean dumpKmersAsBytes(ByteStreamWriter bsw, int k, int mincount, int maxcount, AtomicLong remaining){ jpayne@68: if(value<1){return true;} jpayne@68: if(value>=mincount){ jpayne@68: if(remaining!=null && remaining.decrementAndGet()<0){return true;} jpayne@68: bsw.printlnKmer(pivot, value, k); jpayne@68: } jpayne@68: if(left!=null){left.dumpKmersAsBytes(bsw, k, mincount, maxcount, remaining);} jpayne@68: if(right!=null){right.dumpKmersAsBytes(bsw, k, mincount, maxcount, remaining);} jpayne@68: return true; jpayne@68: } jpayne@68: jpayne@68: @Override jpayne@68: public final boolean dumpKmersAsBytes_MT(final ByteStreamWriter bsw, final ByteBuilder bb, final int k, final int mincount, int maxcount, AtomicLong remaining){ jpayne@68: if(value<1){return true;} jpayne@68: if(value>=mincount){ jpayne@68: if(remaining!=null && remaining.decrementAndGet()<0){return true;} jpayne@68: toBytes(pivot, value, k, bb); jpayne@68: bb.nl(); jpayne@68: if(bb.length()>=16000){ jpayne@68: ByteBuilder bb2=new ByteBuilder(bb); jpayne@68: synchronized(bsw){bsw.addJob(bb2);} jpayne@68: bb.clear(); jpayne@68: } jpayne@68: } jpayne@68: if(left!=null){left.dumpKmersAsBytes_MT(bsw, bb, k, mincount, maxcount, remaining);} jpayne@68: if(right!=null){right.dumpKmersAsBytes_MT(bsw, bb, k, mincount, maxcount, remaining);} jpayne@68: return true; jpayne@68: } jpayne@68: jpayne@68: @Override jpayne@68: protected final StringBuilder dumpKmersAsText(StringBuilder sb, int k, int mincount, int maxcount){ jpayne@68: if(value<1){return sb;} jpayne@68: if(sb==null){sb=new StringBuilder(32);} jpayne@68: if(value>=mincount){sb.append(AbstractKmerTable.toText(pivot, value, k)).append('\n');} jpayne@68: if(left!=null){left.dumpKmersAsText(sb, k, mincount, maxcount);} jpayne@68: if(right!=null){right.dumpKmersAsText(sb, k, mincount, maxcount);} jpayne@68: return sb; jpayne@68: } jpayne@68: jpayne@68: @Override jpayne@68: protected final ByteBuilder dumpKmersAsText(ByteBuilder bb, int k, int mincount, int maxcount){ jpayne@68: if(value<1){return bb;} jpayne@68: if(bb==null){bb=new ByteBuilder(32);} jpayne@68: if(value>=mincount){bb.append(AbstractKmerTable.toBytes(pivot, value, k)).append('\n');} jpayne@68: if(left!=null){left.dumpKmersAsText(bb, k, mincount, maxcount);} jpayne@68: if(right!=null){right.dumpKmersAsText(bb, k, mincount, maxcount);} jpayne@68: return bb; jpayne@68: } jpayne@68: jpayne@68: @Override jpayne@68: final boolean TWOD(){return false;} jpayne@68: jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: /*---------------- Invalid Methods ----------------*/ jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: /*---------------- Fields ----------------*/ jpayne@68: /*--------------------------------------------------------------*/ jpayne@68: jpayne@68: int value; jpayne@68: jpayne@68: }