mirror of
https://github.com/ckolivas/lrzip.git
synced 2025-12-06 07:12:00 +01:00
Make full_tag a pointer allowing us to avoid a function call for get_sb
This commit is contained in:
parent
cf35575c72
commit
cb7b0dd339
|
|
@ -435,6 +435,7 @@ struct rzip_control {
|
||||||
uchar *(*get_sb)(rzip_control *control, i64 p);
|
uchar *(*get_sb)(rzip_control *control, i64 p);
|
||||||
void (*do_mcpy)(rzip_control *, unsigned char *, i64, i64);
|
void (*do_mcpy)(rzip_control *, unsigned char *, i64, i64);
|
||||||
void (*next_tag)(rzip_control *, struct rzip_state *, i64, tag *);
|
void (*next_tag)(rzip_control *, struct rzip_state *, i64, tag *);
|
||||||
|
tag (*full_tag)(rzip_control *, struct rzip_state *, i64);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct stream {
|
struct stream {
|
||||||
|
|
|
||||||
23
rzip.c
23
rzip.c
|
|
@ -443,14 +443,27 @@ static void sliding_next_tag(rzip_control *control, struct rzip_state *st, i64 p
|
||||||
*t ^= st->hash_index[*u];
|
*t ^= st->hash_index[*u];
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline tag full_tag(rzip_control *control, struct rzip_state *st, i64 p)
|
static tag single_full_tag(rzip_control *control, struct rzip_state *st, i64 p)
|
||||||
|
{
|
||||||
|
tag ret = 0;
|
||||||
|
int i;
|
||||||
|
uchar u;
|
||||||
|
|
||||||
|
for (i = 0; i < MINIMUM_MATCH; i++) {
|
||||||
|
u = control->sb.buf_low[p + i];
|
||||||
|
ret ^= st->hash_index[u];
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static tag sliding_full_tag(rzip_control *control, struct rzip_state *st, i64 p)
|
||||||
{
|
{
|
||||||
tag ret = 0;
|
tag ret = 0;
|
||||||
int i;
|
int i;
|
||||||
uchar *u;
|
uchar *u;
|
||||||
|
|
||||||
for (i = 0; i < MINIMUM_MATCH; i++) {
|
for (i = 0; i < MINIMUM_MATCH; i++) {
|
||||||
u = control->get_sb(control, p + i);
|
u = sliding_get_sb(control, p + i);
|
||||||
if (unlikely(!u))
|
if (unlikely(!u))
|
||||||
return -1;
|
return -1;
|
||||||
ret ^= st->hash_index[*u];
|
ret ^= st->hash_index[*u];
|
||||||
|
|
@ -625,7 +638,7 @@ static inline bool hash_search(rzip_control *control, struct rzip_state *st,
|
||||||
current.ofs = 0;
|
current.ofs = 0;
|
||||||
|
|
||||||
if (likely(end > 0)) {
|
if (likely(end > 0)) {
|
||||||
t = full_tag(control, st, p);
|
t = control->full_tag(control, st, p);
|
||||||
if (unlikely(t == -1))
|
if (unlikely(t == -1))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -690,7 +703,7 @@ static inline bool hash_search(rzip_control *control, struct rzip_state *st,
|
||||||
st->last_match = current.p + current.len;
|
st->last_match = current.p + current.len;
|
||||||
current.p = p = st->last_match;
|
current.p = p = st->last_match;
|
||||||
current.len = 0;
|
current.len = 0;
|
||||||
t = full_tag(control, st, p);
|
t = control->full_tag(control, st, p);
|
||||||
if (unlikely(t == -1))
|
if (unlikely(t == -1))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -1003,6 +1016,7 @@ bool rzip_fd(rzip_control *control, int fd_in, int fd_out)
|
||||||
control->get_sb = single_get_sb;
|
control->get_sb = single_get_sb;
|
||||||
control->do_mcpy = single_mcpy;
|
control->do_mcpy = single_mcpy;
|
||||||
control->next_tag = &single_next_tag;
|
control->next_tag = &single_next_tag;
|
||||||
|
control->full_tag = &single_full_tag;
|
||||||
|
|
||||||
while (!pass || len > 0 || (STDIN && !st->stdin_eof)) {
|
while (!pass || len > 0 || (STDIN && !st->stdin_eof)) {
|
||||||
double pct_base, pct_multiple;
|
double pct_base, pct_multiple;
|
||||||
|
|
@ -1073,6 +1087,7 @@ retry:
|
||||||
control->get_sb = &sliding_get_sb;
|
control->get_sb = &sliding_get_sb;
|
||||||
control->do_mcpy = &sliding_mcpy;
|
control->do_mcpy = &sliding_mcpy;
|
||||||
control->next_tag = &sliding_next_tag;
|
control->next_tag = &sliding_next_tag;
|
||||||
|
control->full_tag = &sliding_full_tag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print_maxverbose("Succeeded in testing %lld sized mmap for rzip pre-processing\n", st->mmap_size);
|
print_maxverbose("Succeeded in testing %lld sized mmap for rzip pre-processing\n", st->mmap_size);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue