#pragma once #include #ifdef __cplusplus extern "C" { #endif #define FNV_1A_INIT 2166136261UL // FNV-1a hash, 32-bit uint32_t fnv1a_buffer_hash(const uint8_t* buffer, uint32_t length, uint32_t hash); #ifdef __cplusplus } #endif #ifdef __cplusplus // constexpr FNV-1a hash for strings, 32-bit inline constexpr uint32_t fnv1a_string_hash(const char* str) { uint32_t hash = FNV_1A_INIT; while(*str) { hash = (hash ^ *str) * 16777619ULL; str += 1; } return hash; } #else // FNV-1a hash for strings, 32-bit inline uint32_t fnv1a_string_hash(const char* str) { uint32_t hash = FNV_1A_INIT; while(*str) { hash = (hash ^ *str) * 16777619ULL; str += 1; } return hash; } #endif