14 #if QX_CONSTEXPR_SEQUENCE_SUPPORTED
30 template<u32 nModulus, u32 nMultiplier, u32 nIncrement>
31 constexpr
u32 linear_congruential_generator(
u32 nPrev)
33 return (nMultiplier * nPrev + nIncrement) % nModulus;
46 template<u32 nMin, u32 nMax, u32 nModulus, u32 nMultiplier, u32 nIncrement>
47 constexpr
u32 uniform_distribution(
u32 nPrev)
49 return nMin + linear_congruential_generator<nModulus, nMultiplier, nIncrement>(nPrev) % nMax;
56 u32 nMin = std::numeric_limits<u32>::min(),
57 u32 nMax = std::numeric_limits<u32>::max(),
58 u32 nModulus = 2147483648u,
59 u32 nMultiplier = 1103515245u,
60 u32 nIncrement = 12345u>
61 using constexpr_random =
62 constexpr_sequence<Tag, u32, nSeed, uniform_distribution<nMin, nMax, nModulus, nMultiplier, nIncrement> >;
72 #define QX_UNIQUE_SEED \
74 (qx::murmur_32_hash(__FILE__ __DATE__ __TIME__, 42u, qx::strlen(__FILE__ __DATE__ __TIME__)) + __LINE__))
uint32_t u32
0 .. 18 446 744 073 709 551 615