mirror of
https://github.com/ckolivas/lrzip.git
synced 2026-03-02 11:03:56 +01:00
Add some lrzip style defines and optimisations to the lrzip functions in libzpaq.h
This commit is contained in:
parent
77f6965f25
commit
93049636e4
|
|
@ -439,15 +439,24 @@ void compress(Reader* in, Writer* out, int level);
|
|||
|
||||
} // namespace libzpaq
|
||||
|
||||
typedef unsigned char uchar;
|
||||
/////////////////////////// lrzip functions //////////////////
|
||||
|
||||
#ifndef uchar
|
||||
#define uchar unsigned char
|
||||
#endif
|
||||
#define likely(x) __builtin_expect(!!(x), 1)
|
||||
#define unlikely(x) __builtin_expect(!!(x), 0)
|
||||
#define __maybe_unused __attribute__((unused))
|
||||
|
||||
typedef long long int i64;
|
||||
|
||||
struct bufRead: public libzpaq::Reader {
|
||||
uchar *s_buf;
|
||||
long long *s_len;
|
||||
bufRead(uchar *buf_, long long *n_): s_buf(buf_), s_len(n_) {}
|
||||
i64 *s_len;
|
||||
bufRead(uchar *buf_, i64 *n_): s_buf(buf_), s_len(n_) {}
|
||||
|
||||
int get() {
|
||||
if (*s_len > 0) {
|
||||
if (likely(*s_len > 0)) {
|
||||
(*s_len)--;
|
||||
return ((int)(uchar)*s_buf++);
|
||||
}
|
||||
|
|
@ -455,10 +464,10 @@ struct bufRead: public libzpaq::Reader {
|
|||
} // read and return byte 0..255, or -1 at EOF
|
||||
|
||||
int read(char *buf, int n) {
|
||||
if (n > *s_len)
|
||||
if (unlikely(n > *s_len))
|
||||
n = *s_len;
|
||||
|
||||
if (n > 0) {
|
||||
if (likely(n > 0)) {
|
||||
*s_len -= n;
|
||||
memcpy(buf, s_buf, n);
|
||||
}
|
||||
|
|
@ -468,8 +477,8 @@ struct bufRead: public libzpaq::Reader {
|
|||
|
||||
struct bufWrite: public libzpaq::Writer {
|
||||
uchar *c_buf;
|
||||
long long *c_len;
|
||||
bufWrite(uchar *buf_, long long *n_): c_buf(buf_), c_len(n_) {}
|
||||
i64 *c_len;
|
||||
bufWrite(uchar *buf_, i64 *n_): c_buf(buf_), c_len(n_) {}
|
||||
|
||||
void put(int c) {
|
||||
c_buf[(*c_len)++] = (uchar)c;
|
||||
|
|
@ -481,14 +490,14 @@ struct bufWrite: public libzpaq::Writer {
|
|||
}
|
||||
};
|
||||
|
||||
extern "C" void zpaq_compress(uchar *c_buf, long long *c_len, uchar *s_buf, long long s_len, int level) {
|
||||
extern "C" void zpaq_compress(uchar *c_buf, i64 *c_len, uchar *s_buf, i64 s_len, int level) {
|
||||
bufRead bufR(s_buf, &s_len);
|
||||
bufWrite bufW(c_buf, c_len);
|
||||
|
||||
compress (&bufR, &bufW, level);
|
||||
}
|
||||
|
||||
extern "C" void zpaq_decompress(uchar *s_buf, long long *d_len, uchar *c_buf, long long c_len) {
|
||||
extern "C" void zpaq_decompress(uchar *s_buf, i64 *d_len, uchar *c_buf, i64 c_len) {
|
||||
bufRead bufR(c_buf, &c_len);
|
||||
bufWrite bufW(s_buf, d_len);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue