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