| 1379 | } Hash; |
| 1380 | |
| 1381 | static unsigned hash_init(Hash* hash, unsigned windowsize) |
| 1382 | { |
| 1383 | unsigned i; |
| 1384 | hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES); |
| 1385 | hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize); |
| 1386 | hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); |
| 1387 | |
| 1388 | hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); |
| 1389 | hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1)); |
| 1390 | hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); |
| 1391 | |
| 1392 | if(!hash->head || !hash->chain || !hash->val || !hash->headz|| !hash->chainz || !hash->zeros) |
| 1393 | { |
| 1394 | return 83; /*alloc fail*/ |
| 1395 | } |
| 1396 | |
| 1397 | /*initialize hash table*/ |
| 1398 | for(i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1; |
| 1399 | for(i = 0; i != windowsize; ++i) hash->val[i] = -1; |
| 1400 | for(i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/ |
| 1401 | |
| 1402 | for(i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1; |
| 1403 | for(i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/ |
| 1404 | |
| 1405 | return 0; |
| 1406 | } |
| 1407 | |
| 1408 | static void hash_cleanup(Hash* hash) |
| 1409 | { |
no test coverage detected