This gives a good performance increase, and usually also improves compression.
Make separate define HASH_SLIDE for fallback version of UPDATE_HASH.
#define FINISH_STATE 666 /* stream complete */
/* Stream status */
-#define HASH_BITS 15 /* log2(HASH_SIZE) */
-#define HASH_SIZE 32768 /* number of elements in hash table */
-#define HASH_MASK 0x7FFF /* HASH_SIZE-1 */
+#define HASH_BITS 16u /* log2(HASH_SIZE) */
+#define HASH_SIZE 65536u /* number of elements in hash table */
+#define HASH_MASK (HASH_SIZE - 1u) /* HASH_SIZE-1 */
/* Data structure describing a single value and its code string. */
* input characters, so that a running hash key can be computed from the
* previous key instead of complete recalculation each time.
*/
+#define HASH_SLIDE 16 // Number of bits to slide hash
+
#define UPDATE_HASH(s, h, val) \
- h = ((val * 2654435761U) >> (32 - HASH_BITS));
+ h = ((val * 2654435761U) >> HASH_SLIDE);
#define INSERT_STRING insert_string_c
#define QUICK_INSERT_STRING quick_insert_string_c