First
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
#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); }
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user