Merge branch 'anbangx/fullstack_genomix' into genomix/fullstack_genomix
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 4ce14cc..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
@@ -14,16 +14,24 @@
*/
package edu.uci.ics.genomix.data;
+import java.nio.ByteBuffer;
+
public class Marshal {
public static int getInt(byte[] bytes, int offset) {
return ((bytes[offset] & 0xff) << 24) + ((bytes[offset + 1] & 0xff) << 16) + ((bytes[offset + 2] & 0xff) << 8)
+ ((bytes[offset + 3] & 0xff) << 0);
}
- public static long getLong(byte[] bytes, int offset) {
- return ((bytes[offset] & 0xff) << 54) + ((bytes[offset] & 0xff) << 48) + ((bytes[offset + 1] & 0xff) << 40)
- + ((bytes[offset + 2] & 0xff) << 32) + ((bytes[offset] & 0xff) << 24) + ((bytes[offset + 1] & 0xff) << 16)
- + ((bytes[offset + 2] & 0xff) << 8) + ((bytes[offset + 3] & 0xff) << 0);
+ public static long getLong(byte[] bytes, int offset) {
+ long value = 0;
+ for (int i = offset; i < bytes.length && i < offset + 8; i++)
+ {
+ value = (value << 8) + (bytes[i] & 0xff);
+ }
+ return value;
+// return ((bytes[offset] & 0xff) << 56) + ((bytes[offset + 1] & 0xff) << 48) + ((bytes[offset + 2] & 0xff) << 40)
+// + ((bytes[offset + 3] & 0xff) << 32) + ((bytes[offset + 4] & 0xff) << 24) + ((bytes[offset + 5] & 0xff) << 16)
+// + ((bytes[offset + 6] & 0xff) << 8) + ((bytes[offset + 7] & 0xff) << 0);
}
public static void putInt(int val, byte[] bytes, int offset) {
@@ -34,14 +42,16 @@
}
public static void putLong(long val, byte[] bytes, int offset) {
- bytes[offset] = (byte)((val >>> 54) & 0xFF);
- bytes[offset + 1] = (byte)((val >>> 48) & 0xFF);
- bytes[offset + 2] = (byte)((val >>> 40) & 0xFF);
- bytes[offset + 3] = (byte)((val >>> 32) & 0xFF);
- bytes[offset + 4] = (byte)((val >>> 24) & 0xFF);
- bytes[offset + 5] = (byte)((val >>> 16) & 0xFF);
- bytes[offset + 6] = (byte)((val >>> 8) & 0xFF);
- bytes[offset + 7] = (byte)((val >>> 0) & 0xFF);
+ ByteBuffer byteBuffer = ByteBuffer.allocate(8);
+ System.arraycopy(byteBuffer.putLong(val).array(), 0, bytes, offset, 8);
+// bytes[offset] = (byte)((val >>> 56) & 0xFF);
+// bytes[offset + 1] = (byte)((val >>> 48) & 0xFF);
+// bytes[offset + 2] = (byte)((val >>> 40) & 0xFF);
+// bytes[offset + 3] = (byte)((val >>> 32) & 0xFF);
+// bytes[offset + 4] = (byte)((val >>> 24) & 0xFF);
+// bytes[offset + 5] = (byte)((val >>> 16) & 0xFF);
+// bytes[offset + 6] = (byte)((val >>> 8) & 0xFF);
+// bytes[offset + 7] = (byte)((val >>> 0) & 0xFF);
}
public static int hashBytes(byte[] bytes, int offset, int length) {
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
index abc8ff1..c620fa2 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
@@ -49,7 +49,10 @@
}
public void append(PositionWritable pos) {
- append(pos.getUUID());
+ if(pos != null)
+ append(pos.getUUID());
+ else
+ throw new RuntimeException("This position is null pointer!");
}
/*
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 7cf9bfc..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,17 +21,22 @@
offset = 0;
}
- public PositionWritable(long uuid){
+ public PositionWritable(byte mateId, long readId, int posId){
this();
- set(uuid);
+ set(mateId, readId, posId);
}
- public void set(long uuid){
- Marshal.putLong(uuid, storage, offset);
+ public PositionWritable(byte[] storage, int offset) {
+ setNewReference(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) {
@@ -39,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 cad6ccb..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,35 +1,41 @@
package edu.uci.ics.genomix.data.test;
-
import junit.framework.Assert;
import org.junit.Test;
import edu.uci.ics.genomix.data.Marshal;
-import edu.uci.ics.genomix.oldtype.PositionWritable;
+import edu.uci.ics.genomix.type.PositionWritable;
public class PositionWritableTest {
@Test
public void TestInitial() {
PositionWritable pos = new PositionWritable();
- pos = new PositionWritable(3, (byte) 1);
- Assert.assertEquals(pos.getReadID(), 3);
- Assert.assertEquals(pos.getPosInRead(), 1);
-
- byte[] start = new byte[256];
- for (int i = 0; i < 128; i++) {
- Marshal.putInt(i, start, i);
- start[i + PositionWritable.INTBYTES] = (byte) (i / 2);
- pos = new PositionWritable(start, i);
- Assert.assertEquals(pos.getReadID(), i);
- Assert.assertEquals(pos.getPosInRead(), (byte) (i / 2));
- pos.set(-i, (byte) (i / 4));
- Assert.assertEquals(pos.getReadID(), -i);
- Assert.assertEquals(pos.getPosInRead(), (byte) (i / 4));
- pos.setNewReference(start, i);
- Assert.assertEquals(pos.getReadID(), -i);
- Assert.assertEquals(pos.getPosInRead(), (byte) (i / 4));
-
+ 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);
}
}
}