Make the PositionWritable and Pass the test
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/data/Marshal.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/data/Marshal.java
index 36c80c1..f61cb6f 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/data/Marshal.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/data/Marshal.java
@@ -22,8 +22,7 @@
                 + ((bytes[offset + 3] & 0xff) << 0);
     }
     
-    public static long getLong(byte[] bytes, int offset) {
-        
+    public static long getLong(byte[] bytes, int offset) {   
         long value = 0;
         for (int i = offset; i < bytes.length && i < offset + 8; i++)
         {
@@ -44,7 +43,6 @@
     
     public static void putLong(long val, byte[] bytes, int offset) {
         ByteBuffer byteBuffer = ByteBuffer.allocate(8); 
-        //byte[] tmp = byteBuffer.putLong(val).array();
         System.arraycopy(byteBuffer.putLong(val).array(), 0, bytes, offset, 8);
 //        bytes[offset] = (byte)((val >>> 56) & 0xFF);        
 //        bytes[offset + 1] = (byte)((val >>> 48) & 0xFF);
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
index 0c33524..1e4eed6 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionWritable.java
@@ -21,21 +21,22 @@
         offset = 0;
     }
     
-    public PositionWritable(long uuid){
+    public PositionWritable(byte mateId, long readId, int posId){
         this();
-        set(uuid);
+        set(mateId, readId, posId);
     }
     
     public PositionWritable(byte[] storage, int offset) {
         setNewReference(storage, offset);
     }
     
-    public void set(long uuid){
-        Marshal.putLong(uuid, storage, offset);
+    public void set(byte mateId, long readId, int posId){
+        long finalId = (readId << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
+        Marshal.putLong(finalId, storage, offset);
     }
     
     public void set(PositionWritable pos) {
-        set(pos.getUUID());
+        set(pos.getMateId(),pos.getReadId(),pos.getPosId());
     }
     
     public void setNewReference(byte[] storage, int offset) {
@@ -43,6 +44,18 @@
         this.offset = offset;
     }
     
+    public byte getMateId(){
+        return (byte) (Marshal.getLong(storage, offset) & 0b1);
+    }
+    
+    public long getReadId(){
+        return Marshal.getLong(storage, offset) >> 17;
+    }
+    
+    public int getPosId(){
+        return (int) ((Marshal.getLong(storage, offset) >> 1) & 0xffff);
+    }
+    
     public long getUUID(){
         return Marshal.getLong(storage, offset);
     }
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
index f616fe9..552ec36 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/PositionWritableTest.java
@@ -1,7 +1,4 @@
 package edu.uci.ics.genomix.data.test;
-
-import java.util.Random;
-
 import junit.framework.Assert;
 
 import org.junit.Test;
@@ -14,24 +11,31 @@
     @Test
     public void TestInitial() {
         PositionWritable pos = new PositionWritable();
-        Random r = new Random();
-        long uuid = -1; //r.nextLong();
-        pos = new PositionWritable(uuid);
-        Assert.assertEquals(pos.getUUID(), uuid);
-        
-        byte[] start = new byte[256];
-        Marshal.putLong(uuid, start, 0);
-        PositionWritable pos1 = new PositionWritable(start, 0);
-        Assert.assertEquals(pos1.getUUID(), uuid);
-//       
-//        for (int i = 0; i < 128; i++) {
-//            Marshal.putLong((long)i, start, i);
-//            pos = new PositionWritable(start, i);
-//            Assert.assertEquals(pos.getUUID(), (long)i);
-//            pos.set((long)-i);
-//            Assert.assertEquals(pos.getUUID(), (long)-i);
-//            pos.setNewReference(start, i);
-//            Assert.assertEquals(pos.getUUID(), (long)-i);
-//        }
+        PositionWritable pos1 = new PositionWritable();
+        byte mateId;
+        long readId;
+        int posId;
+        byte[] start = new byte[8];
+        for (int i = 0; i < 65535; i++) {
+            mateId = (byte)1;
+            readId = (long)i;
+            posId = i;
+            pos = new PositionWritable(mateId, readId, posId);
+            Assert.assertEquals(pos.getMateId(), mateId);
+            Assert.assertEquals(pos.getReadId(), readId);
+            Assert.assertEquals(pos.getPosId(), posId);
+            
+            long finalId = ((readId + 1) << 17) + ((posId & 0xFFFF) << 1) + (mateId & 0b1);
+            Marshal.putLong(finalId, start, 0);
+            pos1 = new PositionWritable(start, 0);
+            Assert.assertEquals(pos1.getMateId(), mateId);
+            Assert.assertEquals(pos1.getReadId(), readId + 1);
+            Assert.assertEquals(pos1.getPosId(), posId);
+            
+            pos.setNewReference(start, 0);
+            Assert.assertEquals(pos.getMateId(), mateId);
+            Assert.assertEquals(pos.getReadId(), readId + 1);
+            Assert.assertEquals(pos.getPosId(), posId);
+        }
     }
 }