Merge pull request #42 from birth-software/better-hash-conversion
Better hash conversion
This commit is contained in:
		
						commit
						c2ce7403ab
					
				@ -384,6 +384,14 @@ may_be_unused fn Hash64 hash_bytes(String bytes)
 | 
				
			|||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					may_be_unused fn Hash32 hash64_to_hash32(Hash64 hash64)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    Hash32 low = hash64 & 0xffff;
 | 
				
			||||||
 | 
					    Hash32 high = (hash64 >> 32) & 0xffff;
 | 
				
			||||||
 | 
					    Hash32 result = (high << 16) | low;
 | 
				
			||||||
 | 
					    return result;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if LINK_LIBC == 0
 | 
					#if LINK_LIBC == 0
 | 
				
			||||||
#ifdef __linux__
 | 
					#ifdef __linux__
 | 
				
			||||||
may_be_unused fn forceinline long syscall0(long n)
 | 
					may_be_unused fn forceinline long syscall0(long n)
 | 
				
			||||||
 | 
				
			|||||||
@ -153,7 +153,9 @@ fn StringMapPut string_map_get(StringMap* map, String key)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    u32 value = 0;
 | 
					    u32 value = 0;
 | 
				
			||||||
    auto long_hash = hash_bytes(key);
 | 
					    auto long_hash = hash_bytes(key);
 | 
				
			||||||
    auto hash = (Hash32)long_hash;
 | 
					    static_assert(sizeof(long_hash) == sizeof(u64));
 | 
				
			||||||
 | 
					    auto hash = hash64_to_hash32(long_hash);
 | 
				
			||||||
 | 
					    static_assert(sizeof(hash) == sizeof(u32));
 | 
				
			||||||
    assert(hash);
 | 
					    assert(hash);
 | 
				
			||||||
    auto index = hash & (map->capacity - 1);
 | 
					    auto index = hash & (map->capacity - 1);
 | 
				
			||||||
    auto slot = string_map_find_slot(map, index, key);
 | 
					    auto slot = string_map_find_slot(map, index, key);
 | 
				
			||||||
@ -174,7 +176,9 @@ fn StringMapPut string_map_get(StringMap* map, String key)
 | 
				
			|||||||
fn StringMapPut string_map_put(StringMap* map, Arena* arena, String key, u32 value)
 | 
					fn StringMapPut string_map_put(StringMap* map, Arena* arena, String key, u32 value)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    auto long_hash = hash_bytes(key);
 | 
					    auto long_hash = hash_bytes(key);
 | 
				
			||||||
    auto hash = (Hash32)long_hash;
 | 
					    static_assert(sizeof(long_hash) == sizeof(u64));
 | 
				
			||||||
 | 
					    auto hash = hash64_to_hash32(long_hash);
 | 
				
			||||||
 | 
					    static_assert(sizeof(hash) == sizeof(u32));
 | 
				
			||||||
    assert(hash);
 | 
					    assert(hash);
 | 
				
			||||||
    auto index = hash & (map->capacity - 1);
 | 
					    auto index = hash & (map->capacity - 1);
 | 
				
			||||||
    auto slot = string_map_find_slot(map, index, key);
 | 
					    auto slot = string_map_find_slot(map, index, key);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user