| 304 | } |
| 305 | |
| 306 | uint64_t dmHashBuffer64(const void * key, uint32_t len) |
| 307 | { |
| 308 | uint64_t h = dmHashBufferNoReverse64(key, len); |
| 309 | |
| 310 | if (dmHashContainer().m_Enabled && len <= DMHASH_MAX_REVERSE_LENGTH) |
| 311 | { |
| 312 | DM_MUTEX_SCOPED_LOCK(dmHashContainer().m_Mutex); |
| 313 | dmHashTable64<ReverseHashEntry>* hash_table = &dmHashContainer().m_HashTable64Entries; |
| 314 | if (hash_table->Get(h) == 0) |
| 315 | { |
| 316 | if (hash_table->Full()) |
| 317 | { |
| 318 | IncreaseTableCapacity(hash_table, dmHashContainer().m_HashTableCapacityIncrement); |
| 319 | } |
| 320 | char* copy = (char*) malloc(len + 1); |
| 321 | memcpy(copy, key, len); |
| 322 | copy[len] = '\0'; |
| 323 | hash_table->Put(h, ReverseHashEntry(copy, len)); |
| 324 | } |
| 325 | } |
| 326 | |
| 327 | return h; |
| 328 | } |
| 329 | |
| 330 | uint32_t DM_DLLEXPORT dmHashString32(const char* string) |
| 331 | { |