diff options
Diffstat (limited to 'src/zopfli/hash.c')
-rw-r--r-- | src/zopfli/hash.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/zopfli/hash.c b/src/zopfli/hash.c index a3b294f..3025d1e 100644 --- a/src/zopfli/hash.c +++ b/src/zopfli/hash.c @@ -26,13 +26,26 @@ Author: jyrki.alakuijala@gmail.com (Jyrki Alakuijala) #define HASH_SHIFT 5 #define HASH_MASK 32767 -void ZopfliInitHash(size_t window_size, ZopfliHash* h) { - size_t i; - - h->val = 0; +void ZopfliAllocHash(size_t window_size, ZopfliHash* h) { h->head = (int*)malloc(sizeof(*h->head) * 65536); h->prev = (unsigned short*)malloc(sizeof(*h->prev) * window_size); h->hashval = (int*)malloc(sizeof(*h->hashval) * window_size); + +#ifdef ZOPFLI_HASH_SAME + h->same = (unsigned short*)malloc(sizeof(*h->same) * window_size); +#endif + +#ifdef ZOPFLI_HASH_SAME_HASH + h->head2 = (int*)malloc(sizeof(*h->head2) * 65536); + h->prev2 = (unsigned short*)malloc(sizeof(*h->prev2) * window_size); + h->hashval2 = (int*)malloc(sizeof(*h->hashval2) * window_size); +#endif +} + +void ZopfliResetHash(size_t window_size, ZopfliHash* h) { + size_t i; + + h->val = 0; for (i = 0; i < 65536; i++) { h->head[i] = -1; /* -1 indicates no head so far. */ } @@ -42,7 +55,6 @@ void ZopfliInitHash(size_t window_size, ZopfliHash* h) { } #ifdef ZOPFLI_HASH_SAME - h->same = (unsigned short*)malloc(sizeof(*h->same) * window_size); for (i = 0; i < window_size; i++) { h->same[i] = 0; } @@ -50,9 +62,6 @@ void ZopfliInitHash(size_t window_size, ZopfliHash* h) { #ifdef ZOPFLI_HASH_SAME_HASH h->val2 = 0; - h->head2 = (int*)malloc(sizeof(*h->head2) * 65536); - h->prev2 = (unsigned short*)malloc(sizeof(*h->prev2) * window_size); - h->hashval2 = (int*)malloc(sizeof(*h->hashval2) * window_size); for (i = 0; i < 65536; i++) { h->head2[i] = -1; } @@ -129,7 +138,6 @@ void ZopfliUpdateHash(const unsigned char* array, size_t pos, size_t end, void ZopfliWarmupHash(const unsigned char* array, size_t pos, size_t end, ZopfliHash* h) { - (void)end; UpdateHashValue(h, array[pos + 0]); - UpdateHashValue(h, array[pos + 1]); + if (pos + 1 < end) UpdateHashValue(h, array[pos + 1]); } |