From f9894647e308e6dd8ca8c34f86df68fb83cb21e2 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sun, 25 Apr 2021 22:08:42 +0300 Subject: [PATCH] Better 64-bit hash_combine --- libs/util/include/psemek/util/hash.hpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libs/util/include/psemek/util/hash.hpp b/libs/util/include/psemek/util/hash.hpp index 4e6a1e9c..a2ae01e8 100644 --- a/libs/util/include/psemek/util/hash.hpp +++ b/libs/util/include/psemek/util/hash.hpp @@ -6,10 +6,14 @@ namespace psemek::util { - // based on boost::hash_combine inline void hash_combine(std::size_t & seed, std::size_t value) { - seed ^= value + 0x9e3779b9 + (seed<<6) + (seed>>2); + static const std::size_t k = 0x9ddfea08eb382d69ULL; + std::size_t a = (value ^ seed) * k; + a ^= (a >> 47); + std::size_t b = (seed ^ a) * k; + b ^= (b >> 47); + seed = b * k; } }