| 521 | } |
| 522 | |
| 523 | void dmHashUpdateBuffer64(HashState64* hash_state, const void* buffer, uint32_t buffer_len) |
| 524 | { |
| 525 | const uint64_t m = 0xc6a4a7935bd1e995ULL; |
| 526 | const int r = 47; |
| 527 | |
| 528 | const unsigned char * data = (const unsigned char *) buffer; |
| 529 | int len = (int) buffer_len; |
| 530 | |
| 531 | hash_state->m_Size += len; |
| 532 | |
| 533 | MixTail64(hash_state, data, len); |
| 534 | |
| 535 | while(len >= 8) |
| 536 | { |
| 537 | uint64_t k; |
| 538 | k = uint64_t(data[0]); |
| 539 | k |= uint64_t(data[1]) << 8; |
| 540 | k |= uint64_t(data[2]) << 16; |
| 541 | k |= uint64_t(data[3]) << 24; |
| 542 | k |= uint64_t(data[4]) << 32; |
| 543 | k |= uint64_t(data[5]) << 40; |
| 544 | k |= uint64_t(data[6]) << 48; |
| 545 | k |= uint64_t(data[7]) << 56; |
| 546 | |
| 547 | mmix(hash_state->m_Hash, k); |
| 548 | |
| 549 | data += 8; |
| 550 | len -= 8; |
| 551 | } |
| 552 | |
| 553 | MixTail64(hash_state, data, len); |
| 554 | if (dmHashContainer().m_Enabled && hash_state->m_ReverseHashEntryIndex && hash_state->m_Size <= DMHASH_MAX_REVERSE_LENGTH) |
| 555 | { |
| 556 | dmHashContainer().UpdateReversHashState(hash_state->m_ReverseHashEntryIndex, hash_state->m_Size, buffer, buffer_len); |
| 557 | } |
| 558 | } |
| 559 | |
| 560 | uint64_t dmHashFinal64(HashState64* hash_state) |
| 561 | { |