summaryrefslogtreecommitdiff
path: root/src/hash.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-06-20 15:04:31 +0100
committerMaxime Coste <frrrwww@gmail.com>2015-06-20 15:04:31 +0100
commit7fd7098265f228acc772b940d72cc9a6fabd45b2 (patch)
treefc83195279a9b6488ed928d4b486dcda91dfcb79 /src/hash.hh
parentb79c5e2f8a204b696b01bb7e5c4ffe2d7e0b93a1 (diff)
Add a combine_hash helper function
Diffstat (limited to 'src/hash.hh')
-rw-r--r--src/hash.hh8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/hash.hh b/src/hash.hh
index 3fc8abd2..896478f3 100644
--- a/src/hash.hh
+++ b/src/hash.hh
@@ -31,12 +31,16 @@ size_t hash_values(Type&& t)
return hash_value(std::forward<Type>(t));
}
+inline size_t combine_hash(size_t lhs, size_t rhs)
+{
+ return lhs ^ (rhs + 0x9e3779b9 + (lhs << 6) + (lhs >> 2));
+}
+
template<typename Type, typename... RemainingTypes>
size_t hash_values(Type&& t, RemainingTypes&&... rt)
{
size_t seed = hash_values(std::forward<RemainingTypes>(rt)...);
- return seed ^ (hash_value(std::forward<Type>(t)) + 0x9e3779b9 +
- (seed << 6) + (seed >> 2));
+ return combine_hash(seed, hash_value(std::forward<Type>(t)));
}
template<typename T1, typename T2>