MCPcopy Create free account
hub / github.com/defold/defold / dmHashFinal64

Function dmHashFinal64

engine/dlib/src/dlib/hash.cpp:560–594  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

558}
559
560uint64_t dmHashFinal64(HashState64* hash_state)
561{
562 const uint64_t m = 0xc6a4a7935bd1e995ULL;
563 const int r = 47;
564
565 uint64_t s = hash_state->m_Size;
566 mmix(hash_state->m_Hash, hash_state->m_Tail);
567 mmix(hash_state->m_Hash, s);
568
569 hash_state->m_Hash ^= hash_state->m_Hash >> r;
570 hash_state->m_Hash *= m;
571 hash_state->m_Hash ^= hash_state->m_Hash >> r;
572
573 if (dmHashContainer().m_Enabled && hash_state->m_ReverseHashEntryIndex && hash_state->m_Size <= DMHASH_MAX_REVERSE_LENGTH)
574 {
575 DM_MUTEX_SCOPED_LOCK(dmHashContainer().m_Mutex);
576 dmHashTable64<ReverseHashEntry>* hash_table = &dmHashContainer().m_HashTable64Entries;
577 if (hash_table->Get(hash_state->m_Hash) == 0)
578 {
579 if (hash_table->Full())
580 {
581 IncreaseTableCapacity(hash_table, dmHashContainer().m_HashTableCapacityIncrement);
582 }
583 hash_table->Put(hash_state->m_Hash, dmHashContainer().m_HashStates[hash_state->m_ReverseHashEntryIndex]);
584 }
585 else
586 {
587 free(dmHashContainer().m_HashStates[hash_state->m_ReverseHashEntryIndex].m_Value);
588 }
589 dmHashContainer().FreeReverseHashStatesSlot(hash_state->m_ReverseHashEntryIndex);
590 hash_state->m_ReverseHashEntryIndex = 0;
591 }
592
593 return hash_state->m_Hash;
594}
595
596void dmHashRelease64(HashState64* hash_state)
597{

Callers 15

GetAbsoluteIdentifierFunction · 0.85
DrawFunction · 0.85
WriteIndexFunction · 0.85
BeginFunction · 0.85
EndFunction · 0.85
GetFunction · 0.85
ReleaseFunction · 0.85
CalculateConnectionIDFunction · 0.85
TEST_FFunction · 0.85
dmHashCTestIncrementalFunction · 0.85

Calls 6

IncreaseTableCapacityFunction · 0.85
freeFunction · 0.85
GetMethod · 0.45
FullMethod · 0.45
PutMethod · 0.45

Tested by 4

TEST_FFunction · 0.68
dmHashCTestIncrementalFunction · 0.68
TEST_FFunction · 0.68