| 123456789101112131415161718192021222324252627282930313233343536373839 |
- #pragma once
- #include <stdint.h>
- #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
|