44 lines
2.3 KiB
C++
44 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include "tl/detail/prologue.h"
|
|
#include <cstdint>
|
|
#include <cstddef>
|
|
|
|
namespace tl
|
|
{
|
|
|
|
//case insensitive murmur hash. Used for case insensitive strings
|
|
//uint32_t murmur32_ci(const void* buffer, size_t size, uint32_t seed);
|
|
//uint32_t murmur32_ci(const char* c_str, uint32_t seed);
|
|
|
|
TL_API uint32_t murmur32(const void* buffer, size_t size, uint32_t seed);
|
|
TL_API uint64_t murmur64(const void* buffer, size_t size, uint32_t seed);
|
|
TL_API uint64_t murmur64_seed64(const void* buffer, size_t size, uint64_t seed);
|
|
|
|
TL_API uint32_t murmur32(const char* c_str, uint32_t seed);
|
|
TL_API uint64_t murmur64(const char* c_str, uint32_t seed);
|
|
TL_API uint32_t murmur_unaligned32(const char* c_str, uint32_t seed);
|
|
TL_API uint64_t murmur_unaligned64(const char* c_str, uint32_t seed);
|
|
|
|
TL_API uint32_t murmur_unaligned32(const void* i_buffer, size_t i_size, uint32_t i_seed);
|
|
TL_API uint64_t murmur_unaligned64(const void* i_buffer, size_t i_size, uint64_t i_seed);
|
|
|
|
//templated interface for metaprogramming
|
|
|
|
//buffer + size hashing
|
|
template<typename T> T murmur(const void* buffer, size_t size, uint32_t seed); //intentionally left without implementation to fail compilation for unsupported types
|
|
template<> inline uint8_t murmur(const void* buffer, size_t size, uint32_t seed) { return murmur32(buffer, size, seed) & 0xff; }
|
|
template<> inline uint16_t murmur(const void* buffer, size_t size, uint32_t seed) { return murmur32(buffer, size, seed) & 0xffff; }
|
|
template<> inline uint32_t murmur(const void* buffer, size_t size, uint32_t seed) { return murmur32(buffer, size, seed); }
|
|
template<> inline uint64_t murmur(const void* buffer, size_t size, uint32_t seed) { return murmur64(buffer, size, seed); }
|
|
|
|
//c string hashing
|
|
template<typename T> T murmur(const char* c_str, uint32_t seed); //intentionally left without implementation to fail compilation for unsupported types
|
|
template<> inline uint8_t murmur(const char* c_str, uint32_t seed) { return murmur32(c_str, seed) & 0xF; }
|
|
template<> inline uint16_t murmur(const char* c_str, uint32_t seed) { return murmur32(c_str, seed) & 0xFF; }
|
|
template<> inline uint32_t murmur(const char* c_str, uint32_t seed) { return murmur32(c_str, seed); }
|
|
template<> inline uint64_t murmur(const char* c_str, uint32_t seed) { return murmur64(c_str, seed); }
|
|
|
|
}
|
|
|