8#include "byte_string.hpp"
15inline bstring get_bytes(T &generator, ssize_t count)
17 decltype(generator()) random_number;
19 auto data = bstring(
static_cast<size_t>(count), std::byte{0});
22 while (i < count - ssizeof(random_number) - 1) {
23 random_number = generator();
24 for (
int j = 0; j <
sizeof(random_number); j++) {
25 data[i++] =
static_cast<std::byte
>(random_number);
30 random_number = generator();
32 data[i++] =
static_cast<std::byte
>(random_number);
41 static constexpr uint64_t multiplier = 6364136223846793005u;
42 static constexpr uint64_t increment = 1442695040888963407u;
47 pcg32(uint64_t seed = 0x4d595df4d0f33173) :
48 state(seed + increment)
53 uint32_t operator()() {
56 state = x * multiplier + increment;
58 ttlet count =
static_cast<unsigned int>(x >> 59);
61 return rotr(
static_cast<uint32_t
>(x >> 27), count);
65 return tt::get_bytes(*
this, count);
70 static constexpr uint64_t multiplier = 6364136223846793005u;
71 static constexpr uint64_t increment = 1442695040888963407u;
77 state(seed + increment)
82 uint32_t operator()() {
83 auto x = state.
load(std::memory_order_relaxed);
86 [[unlikely]] new_state = x * multiplier + increment;
89 ttlet count =
static_cast<unsigned int>(x >> 59);
92 return rotr(
static_cast<uint32_t
>(x >> 27), count);
96 return tt::get_bytes(*
this, count);
Definition random_pcg.hpp:40
Definition random_pcg.hpp:69
T compare_exchange_weak(T... args)