#include "hash.h" #include #include Hasher* hasher_new() { Hasher* hasher = malloc(sizeof(Hasher)); *hasher = (Hasher) {}; return hasher; } uint64_t hasher_finish(Hasher hasher) { return hasher.state; } void hasher_free(Hasher* hasher) { free(hasher); } void hasher_hash_u64(Hasher* hasher, uint64_t v) { uint64_t value = hasher->state + v; value ^= value >> 33; value *= 0xff51afd7ed558ccdL; value ^= value >> 33; value *= 0xc4ceb9fe1a85ec53L; value ^= value >> 33; hasher->state = value; } void hasher_hash_u8(Hasher* hasher, uint8_t v) { hasher_hash_u64(hasher, v); } void string_hash(Hasher* hasher, const char* str) { for (size_t i = 0; str[i] != '\0'; ++i) { hasher_hash_u8(hasher, (uint8_t)str[i]); } } void size_hash(Hasher* hasher, size_t value) { hasher_hash_u64(hasher, (uint64_t)value); }