savier/system_packages/collections/map_string.rii

33 lines
579 B
Plaintext

import libc { ... }
func std_hash_bytes(buf: uint8*, len: usize): ullong
{
x: ullong = 0xcbf29ce484222325;
for (i := 0; i < len; i++)
{
x ^= buf[i];
x *= 0x100000001b3;
x ^= x >> 32;
}
return x;
}
func std_hash_str(ptr: void*): ullong
{
return std_hash_bytes((:uint8*)ptr, strlen((:char*)ptr));
}
func std_cmp_str(key: void*, test: void*): bool
{
a: char* = (:char*)key;
b: char* = (:char*)test;
return strcmp(a, b) == 0;
}
func std_map_str_new(): std_map*
{
m: std_map* = calloc(1, sizeof(std_map));
std_map_init(m, std_hash_str, std_cmp_str);
return m;
}