12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- #ifndef BOOST_UUID_DETAIL_HASH_MIX_INCLUDED
- #define BOOST_UUID_DETAIL_HASH_MIX_INCLUDED
- // Copyright 2024 Peter Dimov
- // Distributed under the Boost Software License, Version 1.0.
- // https://www.boost.org/LICENSE_1_0.txt
- #include <cstdint>
- namespace boost {
- namespace uuids {
- namespace detail {
- // The multipliers are 32 bit, which makes the product
- // easier to compute on 32 bit platforms.
- //
- // The mixing functions have been created with
- // https://github.com/skeeto/hash-prospector
- // prospector -p mul,xorr -t 1000
- // score = 592.20293470138972
- inline std::uint64_t hash_mix_mx( std::uint64_t x ) noexcept
- {
- x *= 0xD96AAA55;
- x ^= x >> 16;
- return x;
- }
- // prospector -p mul:0xD96AAA55,xorr:16,mul,xorr -t 1000
- // score = 79.5223047689704
- // (with mx prepended)
- inline std::uint64_t hash_mix_fmx( std::uint64_t x ) noexcept
- {
- x *= 0x7DF954AB;
- x ^= x >> 16;
- return x;
- }
- } // detail
- } // uuids
- } // boost
- #endif // #ifndef BOOST_UUID_DETAIL_HASH_MIX_INCLUDED
|