diff --git a/README.md b/README.md new file mode 100644 index 0000000..8f5fbd6 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +slimfastq +========= + +A very efficient lossless compression for fastq files. + +Usage +----- + +
+% slimfastq *fastq-file* *new-sfq-file*   : compress *fastq-file* to *new-sfq-file* 
+% slimfastq *sfq-file*                    : decompress *sfq-file* to stdout
+% slimfastq -h                            : get help
+
diff --git a/coder.hpp b/coder.hpp index 3e66eeb..eb7c5ff 100644 --- a/coder.hpp +++ b/coder.hpp @@ -24,7 +24,7 @@ class RCoder { enum { TOP =(1ULL<<24) }; UINT64 low; UINT64 code; - UINT32 range; + UINT32 range; FilerLoad* m_in; FilerSave* m_out; diff --git a/qlts.cpp b/qlts.cpp index 122f6e7..da9b429 100644 --- a/qlts.cpp +++ b/qlts.cpp @@ -85,14 +85,13 @@ void QltSave::save_2(const UCHAR* buf, size_t size) { for (const UCHAR* p = buf ; p < buf + size; p++) { UCHAR b = UCHAR(*p-'!'); - rarely_if(b >= LAST_QLT) { + PREFETCH(ranger + last); + likely_if(b < LAST_QLT) + ranger[last].put(&rcoder, b); + else { ranger[last].put(&rcoder, LAST_QLT); exranger.put(&rcoder, b); - continue; } - - PREFETCH(ranger + last); - ranger[last].put(&rcoder, b); last = calc_last_2(last, b); } } @@ -106,15 +105,14 @@ void QltSave::save_3(const UCHAR* buf, size_t size) { for (const UCHAR* p = buf ; p < buf + size; p++) { UCHAR b = UCHAR(*p-'!'); - rarely_if(b >= LAST_QLT) { + PREFETCH(ranger + last); + likely_if(b < LAST_QLT) + ranger[last].put(&rcoder, b); + else { ranger[last].put(&rcoder, LAST_QLT); exranger.put(&rcoder, b); - continue; } - PREFETCH(ranger + last); - ranger[last].put(&rcoder, b); - if (++ di & 1) { last = calc_last_delta(delta, b, q1, q2); q2 = b; @@ -176,13 +174,12 @@ UINT32 QltLoad::load_2(UCHAR* buf, const size_t size) { PREFETCH(ranger + last); UCHAR b = ranger[last].get(&rcoder); - rarely_if(b == LAST_QLT) { + likely_if(b < LAST_QLT) + *p = UCHAR('!' + b); + else { b = exranger.get(&rcoder); *p = UCHAR('!' + b); - continue; } - - *p = UCHAR('!' + b); last = calc_last_2(last, b); } return m_valid ? size : 0; @@ -199,12 +196,12 @@ UINT32 QltLoad::load_3(UCHAR* buf, const size_t size) { PREFETCH(ranger + last); UCHAR b = ranger[last].get(&rcoder); - rarely_if(b == LAST_QLT) { + likely_if(b < LAST_QLT) + *p = UCHAR('!' + b); + else { b = exranger.get(&rcoder); *p = UCHAR('!' + b); - continue; } - *p = UCHAR('!' + b); if (++di & 1) {