From e2f287420a65d22cf2ffd2ec07047566825d0155 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 5 Feb 2024 00:58:40 +0700 Subject: [PATCH] little hash combiner cleanup --- headers/meta.hpp/meta_base/hash_combiner.hpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/headers/meta.hpp/meta_base/hash_combiner.hpp b/headers/meta.hpp/meta_base/hash_combiner.hpp index a422dc6..ed0674d 100644 --- a/headers/meta.hpp/meta_base/hash_combiner.hpp +++ b/headers/meta.hpp/meta_base/hash_combiner.hpp @@ -12,14 +12,22 @@ namespace meta_hpp::detail { struct hash_combiner { template < typename T > - [[nodiscard]] std::size_t operator()(const T& x) noexcept { + [[nodiscard]] std::size_t operator()(const T& x) const noexcept { return std::hash{}(x); } template < typename T > - [[nodiscard]] std::size_t operator()(std::size_t seed, const T& x) noexcept { + requires(sizeof(std::size_t) == sizeof(std::uint32_t)) + [[nodiscard]] std::size_t operator()(std::size_t seed, const T& x) const noexcept { // NOLINTNEXTLINE(*-magic-numbers) - return (seed ^= std::hash{}(x) + 0x9e3779b9 + (seed << 6) + (seed >> 2)); + return (seed ^= std::hash{}(x) + 0x9e3779b9U + (seed << 6) + (seed >> 2)); + } + + template < typename T > + requires(sizeof(std::size_t) == sizeof(std::uint64_t)) + [[nodiscard]] std::size_t operator()(std::size_t seed, const T& x) const noexcept { + // NOLINTNEXTLINE(*-magic-numbers) + return (seed ^= std::hash{}(x) + 0x9e3779b97f4a7c15LLU + (seed << 12) + (seed >> 4)); } }; }