summaryrefslogtreecommitdiff
path: root/src/mongo/base/string_data.cpp
diff options
context:
space:
mode:
authorApollon Oikonomopoulos <apoikos@debian.org>2016-01-14 00:10:06 +0200
committerApollon Oikonomopoulos <apollon@skroutz.gr>2016-01-14 00:10:06 +0200
commit374e1947abcd3e127a2a613aff73ecffdb9199ea (patch)
treed83973c3c9802450acd5b5e86fe0d4e8e60a3a1b /src/mongo/base/string_data.cpp
parent65585c90b12d6523bea75a2aebaae2a2fdf9e641 (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.cpp25
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