31 constexpr size_t FNV_offset_basis = (
sizeof(size_t) == 8) ?
static_cast<size_t>(14695981039346656037ULL) : 2166136261U;
32 constexpr size_t FNV_prime = (
sizeof(size_t) == 8) ?
static_cast<size_t>(1099511628211ULL) : 16777619U;
37 constexpr size_t fnv1a(uint8_t data,
size_t hashValue)
noexcept {
54 for (
const uint8_t* read =
static_cast<const uint8_t*
>(bytes); length--; ++read) {
55 hashValue =
fnv1a(*read, hashValue);
62 constexpr size_t hash() noexcept {
67 template<typename T, typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value || std::is_floating_point<T>::value,
int>::type* =
nullptr>
69 constexpr size_t hash(
T data,
size_t hashValue =
hash()) noexcept {
70 return fnv1a(&data,
sizeof(data), hashValue);
75 constexpr size_t hash(
const char* str,
size_t hashValue =
hash()) noexcept {
77 hashValue =
fnv1a(
static_cast<uint8_t
>(*str), hashValue);
94 constexpr
size_t hash(const
void* mem,
size_t size,
size_t hashValue =
hash()) noexcept {
95 return fnv1a(mem, size, hashValue);
100 constexpr size_t hash(std::string_view str,
size_t hashValue =
hash()) noexcept {
101 for (
const char read : str) {
102 hashValue =
fnv1a(read, hashValue);
#define COGSFOUNDATION_API
Definition: FoundationBase.h:31
constexpr size_t FNV_prime
Definition: HashFunctions.h:32
constexpr size_t FNV_offset_basis
Definition: HashFunctions.h:31
Main Cogs namespace.
Definition: MortonCode.h:5
constexpr size_t hash() noexcept
Simple getter function that returns the initial value for fnv1a hashing.
Definition: HashFunctions.h:62
constexpr size_t fnv1a(uint8_t data, size_t hashValue) noexcept
Hashes a single byte using the fnv1a algorithm.
Definition: HashFunctions.h:37
COGSFOUNDATION_API size_t hashLowercase(std::string_view str, size_t hashValue=Cogs::hash()) noexcept
Get the hash code of the string converted to lowercase.
Definition: HashFunctions.cpp:57
COGSFOUNDATION_API size_t murmur2(const void *bytes, const size_t length) noexcept
Implementation of the MurmurHash2 algorithm.
Definition: HashFunctions.cpp:4