Skip to content

Commit

Permalink
Clean up insert_match() in deflate_medium
Browse files Browse the repository at this point in the history
  • Loading branch information
Dead2 committed Apr 11, 2024
1 parent 322753f commit 56d3d98
Showing 1 changed file with 15 additions and 28 deletions.
43 changes: 15 additions & 28 deletions deflate_medium.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,12 @@ static void insert_match(deflate_state *s, struct match match) {
if (UNLIKELY(s->lookahead <= (unsigned int)(match.match_length + WANT_MIN_MATCH)))
return;

/* string at strstart already in table */
match.strstart++;
match.match_length--;

/* matches that are not long enough we need to emit as literals */
if (LIKELY(match.match_length < WANT_MIN_MATCH)) {
match.strstart++;
match.match_length--;
if (LIKELY(match.match_length < WANT_MIN_MATCH - 1)) {
if (UNLIKELY(match.match_length > 0)) {
if (match.strstart >= match.orgstart) {
if (match.strstart + match.match_length - 1 >= match.orgstart) {
Expand All @@ -63,33 +65,18 @@ static void insert_match(deflate_state *s, struct match match) {
return;
}

/* Insert new strings in the hash table. */
if (s->lookahead >= WANT_MIN_MATCH) {
match.match_length--; /* string at strstart already in table */
match.strstart++;

if (LIKELY(match.strstart >= match.orgstart)) {
if (LIKELY(match.strstart + match.match_length - 1 >= match.orgstart)) {
insert_string(s, match.strstart, match.match_length);
} else {
insert_string(s, match.strstart, match.orgstart - match.strstart + 1);
}
} else if (match.orgstart < match.strstart + match.match_length) {
insert_string(s, match.orgstart, match.strstart + match.match_length - match.orgstart);
/* Insert into hash table. */
if (LIKELY(match.strstart >= match.orgstart)) {
if (LIKELY(match.strstart + match.match_length - 1 >= match.orgstart)) {
insert_string(s, match.strstart, match.match_length);
} else {
insert_string(s, match.strstart, match.orgstart - match.strstart + 1);
}
match.strstart += match.match_length;
match.match_length = 0;
} else {
match.strstart += match.match_length;
match.match_length = 0;

if (match.strstart >= (STD_MIN_MATCH - 2))
quick_insert_string(s, match.strstart + 2 - STD_MIN_MATCH);

/* If lookahead < WANT_MIN_MATCH, ins_h is garbage, but it does not
* matter since it will be recomputed at next deflate call.
*/
} else if (match.orgstart < match.strstart + match.match_length) {
insert_string(s, match.orgstart, match.strstart + match.match_length - match.orgstart);
}
match.strstart += match.match_length;
match.match_length = 0;
}

static void fizzle_matches(deflate_state *s, struct match *current, struct match *next) {
Expand Down

0 comments on commit 56d3d98

Please sign in to comment.