vc4/asm/hash.c
2025-10-02 22:44:00 +02:00

51 lines
904 B
C

#include "hash.h"
#include <stddef.h>
#include <stdlib.h>
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);
}