add clearLeadBit into KmerOperation
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 c211ce7..648f28e 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
@@ -183,6 +183,7 @@
int pos = ((kmerlength - 1) % 4) << 1;
byte code = (byte) (c << pos);
bytes[0] = (byte) (((bytes[0] >>> 2) & 0x3f) | code);
+ clearLeadBit();
return output;
}
@@ -211,12 +212,15 @@
byte in = (byte) ((bytes[i + 1] >> 6) & 0x03);
bytes[i] = (byte) ((bytes[i] << 2) | in);
}
- // (k%4) * 2
+ bytes[size - 1] = (byte) ((bytes[size - 1] << 2) | c);
+ clearLeadBit();
+ return output;
+ }
+
+ protected void clearLeadBit(){
if (kmerlength % 4 != 0) {
bytes[0] &= (1 << ((kmerlength % 4) << 1)) - 1;
}
- bytes[size - 1] = (byte) ((bytes[size - 1] << 2) | c);
- return output;
}
public void set(KmerBytesWritable newData) {
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 fc63fd8..5a4329e 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
@@ -107,6 +107,7 @@
this.kmerlength = k;
setSize(0);
setSize(KmerUtil.getByteNumFromK(k));
+ clearLeadBit();
}
}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritableFactory.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritableFactory.java
index 9bd6acb..c00967f 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritableFactory.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritableFactory.java
@@ -80,6 +80,7 @@
if (byteInKmer == 0) {
kmer.getBytes()[0] = (byte) ((kmerChain.getBytes()[0] & 0xff) >> posInByteOfChain);
}
+ kmer.clearLeadBit();
return kmer;
}
@@ -112,6 +113,7 @@
} else {
kmer.getBytes()[0] = (byte) (kmerChain.getBytes()[kmerChain.getLength() - i] & ((1 << posInByteOfChain) - 1));
}
+ kmer.clearLeadBit();
return kmer;
}
@@ -138,9 +140,7 @@
if (byteInKmer == 0) {
kmer.getBytes()[0] = (byte) ((kmerChain.getBytes()[0] & 0xff) >> posInByteOfChain);
}
- if (kSize % 4 != 0) {
- kmer.getBytes()[0] &= (1 << ((kSize % 4) << 1)) - 1;
- }
+ kmer.clearLeadBit();
return kmer;
}
@@ -167,6 +167,7 @@
} else {
this.kmer.getBytes()[0] = (byte) (kmer.getBytes()[0] | ((nextCode & 0x3) << ((kmer.getKmerLength() % 4) << 1)));
}
+ this.kmer.clearLeadBit();
return this.kmer;
}
@@ -194,6 +195,7 @@
this.kmer.getBytes()[byteInMergedKmer] = (byte) ((kmer.getBytes()[i] << 2) | ((kmer.getBytes()[i + 1] >> 6) & 0x3));
}
this.kmer.getBytes()[byteInMergedKmer] = (byte) ((kmer.getBytes()[kmer.getLength() - 1] << 2) | (preCode & 0x3));
+ this.kmer.clearLeadBit();
return this.kmer;
}
@@ -235,6 +237,7 @@
kmer.getBytes()[0] = (byte) ((0xff & nextKmer.getBytes()[0]) >> (8 - posNeedToMove));
}
}
+ kmer.clearLeadBit();
return kmer;
}
@@ -302,6 +305,7 @@
curByteAtKmer++;
}
}
+ this.kmer.clearLeadBit();
return this.kmer;
}
}