33 lines
579 B
Plaintext
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;
|
|
}
|