50 lines
2.3 KiB
C
50 lines
2.3 KiB
C
#pragma once
|
|
#include "dqn.h"
|
|
|
|
/*
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// $$\ $$\ $$$$$$\ $$$$$$\ $$\ $$\
|
|
// $$ | $$ |$$ __$$\ $$ __$$\ $$ | $$ |
|
|
// $$ | $$ |$$ / $$ |$$ / \__|$$ | $$ |
|
|
// $$$$$$$$ |$$$$$$$$ |\$$$$$$\ $$$$$$$$ |
|
|
// $$ __$$ |$$ __$$ | \____$$\ $$ __$$ |
|
|
// $$ | $$ |$$ | $$ |$$\ $$ |$$ | $$ |
|
|
// $$ | $$ |$$ | $$ |\$$$$$$ |$$ | $$ |
|
|
// \__| \__|\__| \__| \______/ \__| \__|
|
|
//
|
|
// dqn_hash.h -- Hashing functions
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// [$FNV1] Dqn_FNV1A -- Hash(x) -> 32/64bit via FNV1a
|
|
// [$MMUR] Dqn_MurmurHash3 -- Hash(x) -> 32/128bit via MurmurHash3
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
*/
|
|
|
|
// NOTE: [$FNV1] Dqn_FNV1A /////////////////////////////////////////////////////////////////////////
|
|
#if !defined(DQN_FNV1A32_SEED)
|
|
#define DQN_FNV1A32_SEED 2166136261U
|
|
#endif
|
|
|
|
#if !defined(DQN_FNV1A64_SEED)
|
|
#define DQN_FNV1A64_SEED 14695981039346656037ULL
|
|
#endif
|
|
|
|
// NOTE: [$MMUR] Dqn_MurmurHash3 ///////////////////////////////////////////////////////////////////
|
|
struct Dqn_MurmurHash3 { uint64_t e[2]; };
|
|
|
|
// NOTE: [$FNV1] Dqn_FNV1A /////////////////////////////////////////////////////////////////////////
|
|
DQN_API uint32_t Dqn_FNV1A32_Hash (void const *bytes, Dqn_usize size);
|
|
DQN_API uint64_t Dqn_FNV1A64_Hash (void const *bytes, Dqn_usize size);
|
|
DQN_API uint32_t Dqn_FNV1A32_Iterate (void const *bytes, Dqn_usize size, uint32_t hash);
|
|
DQN_API uint64_t Dqn_FNV1A64_Iterate (void const *bytes, Dqn_usize size, uint64_t hash);
|
|
|
|
// NOTE: [$MMUR] Dqn_MurmurHash3 ///////////////////////////////////////////////////////////////////
|
|
DQN_API uint32_t Dqn_MurmurHash3_x86U32 (void const *key, int len, uint32_t seed);
|
|
DQN_API Dqn_MurmurHash3 Dqn_MurmurHash3_x64U128 (void const *key, int len, uint32_t seed);
|
|
#define Dqn_MurmurHash3_x64U128AsU64(key, len, seed) (Dqn_MurmurHash3_x64U128(key, len, seed).e[0])
|
|
#define Dqn_MurmurHash3_x64U128AsU32(key, len, seed) (DQN_CAST(uint32_t)Dqn_MurmurHash3_x64U128(key, len, seed).e[0])
|
|
|