5 #ifndef BITCOIN_TEST_UTIL_XOROSHIRO128PLUSPLUS_H
6 #define BITCOIN_TEST_UTIL_XOROSHIRO128PLUSPLUS_H
24 [[nodiscard]] constexpr
static uint64_t
rotl(uint64_t x,
int n)
26 return (x << n) | (x >> (64 - n));
29 [[nodiscard]] constexpr
static uint64_t
SplitMix64(uint64_t& seedval) noexcept
31 uint64_t z = (seedval += UINT64_C(0x9e3779b97f4a7c15));
32 z = (z ^ (z >> 30U)) * UINT64_C(0xbf58476d1ce4e5b9);
33 z = (z ^ (z >> 27U)) * UINT64_C(0x94d049bb133111eb);
34 return z ^ (z >> 31U);
59 const uint64_t result =
rotl(s0 + s1, 17) + s0;
61 m_s0 =
rotl(s0, 49) ^ s1 ^ (s1 << 21);
66 static constexpr
result_type min() noexcept {
return std::numeric_limits<result_type>::min(); }
67 static constexpr
result_type max() noexcept {
return std::numeric_limits<result_type>::max(); }
68 static constexpr
double entropy() noexcept {
return 0.0; }
constexpr XoRoShiRo128PlusPlus(uint64_t seedval) noexcept
constexpr static uint64_t rotl(uint64_t x, int n)
static constexpr result_type max() noexcept
XoRoShiRo128PlusPlus & operator=(XoRoShiRo128PlusPlus &&)=default
constexpr static uint64_t SplitMix64(uint64_t &seedval) noexcept
static constexpr double entropy() noexcept
XoRoShiRo128PlusPlus(const XoRoShiRo128PlusPlus &)=delete
~XoRoShiRo128PlusPlus()=default
XoRoShiRo128PlusPlus(XoRoShiRo128PlusPlus &&)=default
static constexpr result_type min() noexcept
XoRoShiRo128PlusPlus & operator=(const XoRoShiRo128PlusPlus &)=delete
constexpr result_type operator()() noexcept