#include <string.h>
-#define LZ_MIN_MATCH 3
-
#define HASH_BITS 15
#define HASH_SIZE (1 << HASH_BITS)
#define HASH_MASK (HASH_SIZE - 1)
-
-#if LZ_MIN_MATCH == 2
-# define HASH_SHIFT 8
-#elif LZ_MIN_MATCH == 3
-# define HASH_SHIFT 5
-#else
-#error "Invalid LZ_MIN_MATCH"
-#endif
+#define HASH_SHIFT 5
/* Hash function, based on code from zlib. This function will update and return
* the hash value @hash for the string ending on the additional input character
const u8 window[], unsigned str_pos,
unsigned hash)
{
- hash = update_hash(hash, window[str_pos + LZ_MIN_MATCH - 1]);
+ hash = update_hash(hash, window[str_pos + 2]);
prev_tab[str_pos] = hash_tab[hash];
hash_tab[hash] = str_pos;
return hash;
* @window: The window of uncompressed data.
* @bytes_remaining: The number of bytes remaining in the window.
* @strstart: The index of the start of the string in the window that
- * we are trying to find a match for.
+ * we are trying to find a match for.
* @prev_tab: The array of prev pointers for the hash table.
* @cur_match: The index of the head of the hash chain for matches
- * having the hash value of the string beginning
- * at index @strstart.
+ * having the hash value of the string beginning
+ * at index @strstart.
* @prev_len: The length of the match that was found for the string
- * beginning at (@strstart - 1).
+ * beginning at (@strstart - 1).
* @match_start_ret: A location into which the index of the start of the
- * match will be returned.
+ * match will be returned.
* @params: Parameters that affect how long the search will proceed
- * before going with the best that has been found
- * so far.
+ * before going with the best that has been found
+ * so far.
* @min_start_pos: If the chain reaches a match starting before this
* position (including the end-of-chain 0), the search will
* be terminated.
* @record_literal: Consumer for literals.
* @record_ctx: Context passed to @record_match and @record_literal.
* @params: Structure that contains parameters that affect how the
- * analysis proceeds (mainly how good the matches
- * have to be).
+ * analysis proceeds (mainly how good the matches
+ * have to be).
* @prev_tab: Temporary space containing least @window_size elements.
*/
void
-lz_analyze_block(const u8 window[],
+lz_analyze_block(const u8 window[restrict],
input_idx_t window_size,
lz_record_match_t record_match,
lz_record_literal_t record_literal,
void *record_ctx,
const struct lz_params *params,
- input_idx_t prev_tab[])
+ input_idx_t prev_tab[restrict])
{
unsigned cur_input_pos = 0;
unsigned hash = 0;
/* Do not insert strings in hash table beyond this. */
unsigned max_insert = window_size - params->min_match;
-#if LZ_MIN_MATCH == 2
- if (prev_len >= 3)
-#endif
- {
- prev_len -= 2;
-
- do {
- if (++cur_input_pos <= max_insert) {
- hash = insert_string(hash_tab, prev_tab,
- window,
- cur_input_pos,
- hash);
- }
- } while (--prev_len != 0);
- }
+
+ prev_len -= 2;
+
+ do {
+ if (++cur_input_pos <= max_insert) {
+ hash = insert_string(hash_tab, prev_tab,
+ window,
+ cur_input_pos,
+ hash);
+ }
+ } while (--prev_len != 0);
match_available = false;
match_len = params->min_match - 1;
} else if (match_available) {