#ifndef __CXXMPH_RANDOMLY_SEEDED_HASH__ #define __CXXMPH_RANDOMLY_SEEDED_HASH__ // Helper to create randomly seeded hash functions out of existing hash // functions that take a seed as a parameter. #include #include "cmph_types.h" #include "MurmurHash2.h" #include "stringpiece.h" namespace cxxmph { template struct RandomlySeededHashFunction { }; class Murmur2StringPiece { }; class Murmur2Pod { }; template <> struct RandomlySeededHashFunction { RandomlySeededHashFunction() : seed(random()) { } cmph_uint32 operator()(const StringPiece& key) const { return MurmurHash2(key.data(), key.length(), seed); } cmph_uint32 seed; }; template<> struct RandomlySeededHashFunction { RandomlySeededHashFunction() : seed(random()) { } template cmph_uint32 operator()(const Key& key) const { return MurmurHash2(&key, sizeof(key), seed); } cmph_uint32 seed; }; } // namespace cxxmph #endif // __CXXMPH_RANDOMLY_SEEDED_HASH__