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; } }