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);
+        }
     }
 
     /**