diff options
| author | Apollon Oikonomopoulos <apoikos@debian.org> | 2016-01-14 00:10:06 +0200 |
|---|---|---|
| committer | Apollon Oikonomopoulos <apollon@skroutz.gr> | 2016-01-14 00:10:06 +0200 |
| commit | 374e1947abcd3e127a2a613aff73ecffdb9199ea (patch) | |
| tree | d83973c3c9802450acd5b5e86fe0d4e8e60a3a1b /src/mongo/base/string_data.cpp | |
| parent | 65585c90b12d6523bea75a2aebaae2a2fdf9e641 (diff) | |
Imported Upstream version 2.6.11upstream/2.6.11
Diffstat (limited to 'src/mongo/base/string_data.cpp')
| -rw-r--r-- | src/mongo/base/string_data.cpp | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/mongo/base/string_data.cpp b/src/mongo/base/string_data.cpp index 31ab21f1144..51f05fb6839 100644 --- a/src/mongo/base/string_data.cpp +++ b/src/mongo/base/string_data.cpp @@ -20,14 +20,33 @@ namespace mongo { + namespace { + + template <int SizeofSizeT> + size_t murmur3(const StringData& str); + + template <> + size_t murmur3<4>(const StringData& str) { + uint32_t hash; + MurmurHash3_x86_32(str.rawData(), str.size(), 0, &hash); + return hash; + } + + template <> + size_t murmur3<8>(const StringData& str) { + uint64_t hash[2]; + MurmurHash3_x64_128(str.rawData(), str.size(), 0, hash); + return static_cast<size_t>(hash[0]); + } + + } // namespace + std::ostream& operator<<(std::ostream& stream, const StringData& value) { return stream.write(value.rawData(), value.size()); } size_t StringData::Hasher::operator() (const StringData& str) const { - unsigned out; - MurmurHash3_x86_32(str.rawData(), str.size(), 0, &out); - return out; + return murmur3<sizeof(size_t)>(str); } } // namespace mongo |
