Merge branch 'fullstack_genomix' of https://code.google.com/p/hyracks into fullstack_genomix
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
index 648f28e..e901de6 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
@@ -68,14 +68,24 @@
public KmerBytesWritable(int k) {
this.kmerlength = k;
this.size = KmerUtil.getByteNumFromK(kmerlength);
- this.bytes = new byte[this.size];
+ if (k > 0) {
+ this.bytes = new byte[this.size];
+ } else {
+ this.bytes = EMPTY_BYTES;
+ }
}
public KmerBytesWritable(KmerBytesWritable right) {
- this.kmerlength = right.kmerlength;
- this.size = right.size;
- this.bytes = new byte[right.size];
- set(right);
+ if (right != null) {
+ this.kmerlength = right.kmerlength;
+ this.size = right.size;
+ this.bytes = new byte[right.size];
+ set(right);
+ }else{
+ this.kmerlength = 0;
+ this.size = 0;
+ this.bytes = EMPTY_BYTES;
+ }
}
public byte getGeneCodeAtPosition(int pos) {
@@ -216,19 +226,26 @@
clearLeadBit();
return output;
}
-
- protected void clearLeadBit(){
+
+ protected void clearLeadBit() {
if (kmerlength % 4 != 0) {
bytes[0] &= (1 << ((kmerlength % 4) << 1)) - 1;
}
}
public void set(KmerBytesWritable newData) {
- set(newData.bytes, 0, newData.size);
+ if (kmerlength != newData.kmerlength){
+ throw new IllegalArgumentException("kmerSize is different, try to use VKmerBytesWritable instead");
+ }
+ if (kmerlength > 0 ){
+ set(newData.bytes, 0, newData.size);
+ }
}
public void set(byte[] newData, int offset, int length) {
- System.arraycopy(newData, offset, bytes, 0, size);
+ if (kmerlength > 0){
+ System.arraycopy(newData, offset, bytes, 0, size);
+ }
}
/**
@@ -239,16 +256,20 @@
public void readFields(DataInput in) throws IOException {
this.kmerlength = in.readInt();
this.size = KmerUtil.getByteNumFromK(kmerlength);
- if (this.bytes.length < this.size) {
- this.bytes = new byte[this.size];
+ if (this.kmerlength > 0) {
+ if (this.bytes.length < this.size) {
+ this.bytes = new byte[this.size];
+ }
+ in.readFully(bytes, 0, size);
}
- in.readFully(bytes, 0, size);
}
@Override
public void write(DataOutput out) throws IOException {
out.writeInt(kmerlength);
- out.write(bytes, 0, size);
+ if (kmerlength > 0) {
+ out.write(bytes, 0, size);
+ }
}
@Override
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
index 5a4329e..b958ec6 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
@@ -89,13 +89,20 @@
super.setByReadReverse(array, start);
}
+ @Override
public void set(KmerBytesWritable newData) {
- set(newData.kmerlength, newData.bytes, 0, newData.size);
+ if (newData == null){
+ this.set(0,null,0,0);
+ }else{
+ this.set(newData.kmerlength, newData.bytes, 0, newData.size);
+ }
}
public void set(int k, byte[] newData, int offset, int length) {
reset(k);
- System.arraycopy(newData, offset, bytes, 0, size);
+ if (k > 0 ){
+ System.arraycopy(newData, offset, bytes, 0, size);
+ }
}
/**