Skip to content

Commit c383c7d

Browse files
committed
Add auxiliary methods to Encoder
1 parent f918985 commit c383c7d

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ target
33
.project/target
44
/output
55
/target
6+
/output
7+
/target

src/main/java/com/lifetech/hadoop/bioseq/BioSeqEncoder.java

+2
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ abstract public class BioSeqEncoder {
55
char[] colors = {'0','1','2','3','.'};
66

77
abstract byte[] encode(byte [] data,int size);
8+
abstract byte[] encode(byte [] data,int start,int size);
89
abstract byte[] decode(byte [] data,int size);
10+
abstract byte[] decode(byte [] data,int start,int size);
911
}

src/main/java/com/lifetech/hadoop/bioseq/FourBitsEncoder.java

+23-13
Original file line numberDiff line numberDiff line change
@@ -288,24 +288,29 @@ public class FourBitsEncoder extends BioSeqEncoder {
288288
0x04 , // 0xfe
289289
0x04 // 0xff
290290
};
291-
291+
292292
@Override
293293
public byte[] decode(byte[] data, int size) {
294+
return decode(data,0,size);
295+
}
296+
297+
@Override
298+
public byte[] decode(byte[] data, int start,int size) {
294299
int newsize = (size << 1);
295300
// test for padding
296301
if ((data[size-1] & 0x0f) == 0x0f) {
297302
newsize--;
298303
}
299304
byte[] r = new byte[newsize];
300305

301-
for(int i=0;i<size;i++) {
306+
for(int i=start,j=0;i<size;i++,j+=2) {
302307
byte fst = (byte) ((data[i] >> 4) & 0x07);
303308
byte snd = (byte) (data[i] & 0x07);
304-
System.out.printf("D: %d fst = %x %d snd = %x\n",i<<1,fst,(i<<1)+1,snd);
309+
System.out.printf("D: %d fst = %x %d snd = %x\n",i<<1,fst,(j)+1,snd);
305310

306-
r[i<<1] = (byte) ((data[i] & 0x80) == 0x80 ? colors[fst] : bases[fst]);
311+
r[j] = (byte) ((data[i] & 0x80) == 0x80 ? colors[fst] : bases[fst]);
307312
if (snd == 7) break;
308-
r[(i<<1) + 1] = (byte) ((data[i] & 0x08) == 0x08 ? colors[snd] : bases[snd]);
313+
r[j + 1] = (byte) ((data[i] & 0x08) == 0x08 ? colors[snd] : bases[snd]);
309314
}
310315
return r;
311316
}
@@ -316,21 +321,26 @@ public void printBytes(byte[] x,int size) {
316321
}
317322
System.out.print("\n");
318323
}
319-
324+
320325
@Override
321326
public byte[] encode(byte[] data, int size) {
327+
return encode(data,0,size);
328+
}
329+
330+
@Override
331+
public byte[] encode(byte[] data, int start,int size) {
322332
int newsize = ((size+1) >> 1);
323333
byte[] r = new byte[newsize];
324334

325-
for(int i=0;i<size;i+=2) {
326-
r[i >> 1] = (byte) (encodingVector[data[i]] <<4);
335+
for(int i=start,j=0;i<size;i+=2,j++) {
336+
r[j] = (byte) (encodingVector[data[i]] <<4);
327337

328-
if (i+1 < size) {
329-
r[i >> 1] += (byte) (encodingVector[data[i+1]]);
330-
System.out.printf("E: %d %c %c r=%x\n",i,data[i],data[i+1],r[i>>1]);
338+
if (i-start+1 < size) {
339+
r[j] += (byte) (encodingVector[data[i+1]]);
340+
System.out.printf("E: %d %c %c r=%x\n",i,data[i],data[i+1],r[j]);
331341
} else {
332-
r[i >> 1] += 0x0f;
333-
System.out.printf("E: %d %c pad r=%x\n",i,data[i],r[i>>1]);
342+
r[j] += 0x0f;
343+
System.out.printf("E: %d %c pad r=%x\n",i,data[i],r[j]);
334344
}
335345
}
336346
return r;

0 commit comments

Comments
 (0)