diff options
Diffstat (limited to 'src/hash_map.h')
-rw-r--r-- | src/hash_map.h | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/src/hash_map.h b/src/hash_map.h index d3e9c51..88c2681 100644 --- a/src/hash_map.h +++ b/src/hash_map.h @@ -17,24 +17,21 @@ #include "string_piece.h" -static const unsigned int kSeed = 0xDECAFBAD; // MurmurHash2, by Austin Appleby static inline -unsigned int MurmurHash2(const void* key, int len, unsigned int seed) { +unsigned int MurmurHash2(const void* key, int len) { + static const unsigned int seed = 0xDECAFBAD; const unsigned int m = 0x5bd1e995; const int r = 24; unsigned int h = seed ^ len; const unsigned char * data = (const unsigned char *)key; while(len >= 4) { unsigned int k = *(unsigned int *)data; - k *= m; k ^= k >> r; k *= m; - h *= m; h ^= k; - data += 4; len -= 4; } @@ -44,23 +41,12 @@ unsigned int MurmurHash2(const void* key, int len, unsigned int seed) { case 1: h ^= data[0]; h *= m; }; - h ^= h >> 13; h *= m; h ^= h >> 15; - return h; } -static inline size_t StlHash(StringPiece str) { - const char* p = str.str_; - int len = str.len_; - size_t hash = 0; - while (len--) - hash = 5 * hash + *p++; - return hash; -} - #ifdef _MSC_VER #include <hash_map> @@ -69,7 +55,7 @@ using stdext::hash_compare; struct StringPieceCmp : public hash_compare<StringPiece> { size_t operator()(const StringPiece& key) const { - return MurmurHash2(key.str_, key.len_, kSeed); + return MurmurHash2(key.str_, key.len_); } bool operator()(const StringPiece& a, const StringPiece& b) const { int cmp = strncmp(a.str_, b.str_, min(a.len_, b.len_)); @@ -100,7 +86,7 @@ struct hash<std::string> { template<> struct hash<StringPiece> { size_t operator()(StringPiece key) const { - return MurmurHash2(key.str_, key.len_, kSeed); + return MurmurHash2(key.str_, key.len_); } }; |