remove rle after mtf
diff --git a/main.c b/main.c
index c2e006a..c34b19e 100644
--- a/main.c
+++ b/main.c
@@ -88,12 +88,11 @@ int main(int argc, char *argv[]) {
int32_t bwt_index =
libsais_bwt(output, output, sais_array, new_size, 16, NULL);
mtf_encode(&mtf_state, output, buffer, new_size);
- int32_t new_size2 = mrlec(buffer, new_size, output);
begin(&s);
- s.out_queue = buffer;
+ s.out_queue = output;
s.output_ptr = 0;
- for (int32_t i = 0; i < new_size2; i++) encode_bit(&s, output[i]);
+ for (int32_t i = 0; i < new_size; i++) encode_bit(&s, buffer[i]);
flush(&s);
int32_t new_size3 = s.output_ptr;
@@ -101,9 +100,8 @@ int main(int argc, char *argv[]) {
write(output_des, &bytes_read, sizeof(int32_t));
write(output_des, &bwt_index, sizeof(int32_t));
write(output_des, &new_size, sizeof(int32_t));
- write(output_des, &new_size2, sizeof(int32_t));
write(output_des, &new_size3, sizeof(int32_t));
- write(output_des, buffer, new_size3);
+ write(output_des, output, new_size3);
}
free(buffer);
@@ -129,13 +127,12 @@ int main(int argc, char *argv[]) {
if (read(fd, buf, size) != size) break;
uint32_t crc32;
- int32_t bytes_read, bwt_index, new_size, new_size2, new_size3;
+ int32_t bytes_read, bwt_index, new_size, new_size3;
safe_read(input_des, &crc32, sizeof(uint32_t));
safe_read(input_des, &bytes_read, sizeof(int32_t));
safe_read(input_des, &bwt_index, sizeof(int32_t));
safe_read(input_des, &new_size, sizeof(int32_t));
- safe_read(input_des, &new_size2, sizeof(int32_t));
safe_read(input_des, &new_size3, sizeof(int32_t));
safe_read(input_des, buffer, new_size3);
@@ -144,17 +141,16 @@ int main(int argc, char *argv[]) {
s.input_ptr = 0;
s.input_max = new_size3;
init(&s);
- for (int32_t i = 0; i < new_size2; i++) output[i] = decode_bit(&s);
- mrled(output, buffer, new_size);
- mtf_decode(&mtf_state, buffer, output, new_size);
- libsais_unbwt(output, buffer, sais_array, new_size, NULL,
+ for (int32_t i = 0; i < new_size; i++) output[i] = decode_bit(&s);
+ mtf_decode(&mtf_state, output, buffer, new_size);
+ libsais_unbwt(buffer, output, sais_array, new_size, NULL,
bwt_index);
- mrled(buffer, output, bytes_read);
- if (crc32sum(1, output, bytes_read) != crc32) {
+ mrled(output, buffer, bytes_read);
+ if (crc32sum(1, buffer, bytes_read) != crc32) {
fprintf(stderr, "CRC32 checksum mismatch.\n");
return 1;
}
- write(output_des, output, bytes_read);
+ write(output_des, buffer, bytes_read);
}
free(buffer);
