BUGFIX: mergeWithRF uses inefficient, MUCH simpler merge
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 2d2907c..284c2e7 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
@@ -443,47 +443,9 @@
* : the previous kmer
*/
public void mergeWithRFKmer(int initialKmerSize, KmerBytesWritable preKmer) {
- int preKmerLength = lettersInKmer;
- int preSize = bytesUsed;
- lettersInKmer += preKmer.lettersInKmer - initialKmerSize + 1;
- setSize(KmerUtil.getByteNumFromK(lettersInKmer));
- // byte cacheByte = getOneByteFromKmerAtPosition(0, bytes, offset,
- // preSize);
-
- int byteIndex = bytesUsed - 1;
- byte cacheByte = 0x00;
- int posnInByte = 0;
-
- // copy rc of preKmer into high bytes
- for (int i = preKmer.lettersInKmer - 1; i >= initialKmerSize - 1; i--) {
- byte code = GeneCode.getPairedGeneCode(preKmer
- .getGeneCodeAtPosition(i));
- cacheByte |= (byte) (code << posnInByte);
- posnInByte += 2;
- if (posnInByte == 8) {
- bytes[byteIndex--] = cacheByte;
- cacheByte = 0;
- posnInByte = 0;
- }
- }
-
- // copy my kmer into low positions of bytes
- for (int i = 0; i < preKmerLength; i++) {
- // expanding the capacity makes this offset incorrect. It's off by
- // the # of additional bytes added.
- int newposn = i + (bytesUsed - preSize) * 4;
- byte code = geneCodeAtPosition(newposn); // TODO: this evaluation may be reading from a place we just overwrote :(
- cacheByte |= (byte) (code << posnInByte);
- posnInByte += 2;
- if (posnInByte == 8) {
- bytes[byteIndex--] = cacheByte;
- cacheByte = 0;
- posnInByte = 0;
- }
- }
- if (posnInByte > 0)
- bytes[offset] = cacheByte;
- clearLeadBit();
+ KmerBytesWritable reversed = new KmerBytesWritable(preKmer.lettersInKmer);
+ reversed.setByReadReverse(preKmer.toString().getBytes(), 0);
+ mergeWithRRKmer(initialKmerSize, reversed);
}
/**