| 1384 | } |
| 1385 | |
| 1386 | static unsigned getHash(const unsigned char* data, size_t size, size_t pos) |
| 1387 | { |
| 1388 | unsigned result = 0; |
| 1389 | if (HASH_NUM_CHARACTERS == 3 && pos + 2 < size) { |
| 1390 | result ^= (data[pos + 0] << (0 * HASH_SHIFT)); |
| 1391 | result ^= (data[pos + 1] << (1 * HASH_SHIFT)); |
| 1392 | result ^= (data[pos + 2] << (2 * HASH_SHIFT)); |
| 1393 | } else { |
| 1394 | size_t amount, i; |
| 1395 | if(pos >= size) return 0; |
| 1396 | amount = HASH_NUM_CHARACTERS; |
| 1397 | if(pos + amount >= size) amount = size - pos; |
| 1398 | for(i = 0; i < amount; i++) result ^= (data[pos + i] << (i * HASH_SHIFT)); |
| 1399 | } |
| 1400 | return result & HASH_BIT_MASK; |
| 1401 | } |
| 1402 | |
| 1403 | static unsigned countZeros(const unsigned char* data, size_t size, size_t pos) |
| 1404 | { |