1#ifndef FPMAS_RANDOM_GENERATOR_H
2#define FPMAS_RANDOM_GENERATOR_H
14namespace fpmas {
namespace random {
28 template<
typename Generator_t>
45 return Generator_t::min();
54 return Generator_t::max();
67 template<
typename Generator_t>
78 template<
typename Gen,
class CharT,
class Traits>
80 std::basic_ostream<CharT,Traits>& ost,
const Generator<Gen>& g ) {
95 template<
typename Gen,
class CharT,
class Traits>
96 std::basic_istream<CharT,Traits>&
112 template<
typename Generator_t>
137 this->
gen.seed(seed);
141 this->
gen.discard(z);
151 return this->
gen == g.
gen;
158 return this->
gen != g.
gen;
161 template<
typename Gen,
class CharT,
class Traits>
162 friend std::basic_ostream<CharT,Traits>&
165 template<
typename Gen,
class CharT,
class Traits>
166 friend std::basic_istream<CharT,Traits>&
175 template<
class CharT,
class Traits>
176 std::basic_ostream<CharT, Traits>&
operator<<(
177 std::basic_ostream<CharT,Traits>& ost,
const Generator<std::random_device>&) {
186 template<
class CharT,
class Traits>
187 std::basic_istream<CharT,Traits>&
258 void seed(std::random_device::result_type)
override {
267 template<
typename Gen,
class CharT,
class Traits>
268 friend std::basic_ostream<CharT,Traits>&
271 template<
typename Gen,
class CharT,
class Traits>
272 friend std::basic_istream<CharT,Traits>&
321 template<
typename Generator_t = mt19937_64>
324 Generator_t local_generator;
337 local_generator.seed(local_seed);
372 return local_generator();
383 local_generator.discard(z);
393 return Generator_t::min();
402 return Generator_t::max();
415 template<
typename Generator_t>
416 struct adl_serializer<
fpmas::random::Generator<Generator_t>> {
424 template<
typename JsonType>
426 std::stringstream str_buf;
437 template<
typename JsonType>
439 std::stringstream str_buf(j.template get<std::string>());
445namespace fpmas {
namespace io {
namespace datapack {
449 template<
typename Generator_t>
459 template<
typename PackType>
461 const PackType& pack,
463 std::ostringstream str;
465 return pack.size(str.str());
474 template<
typename PackType>
476 std::ostringstream str;
478 pack.template put(str.str());
487 template<
typename PackType>
489 const PackType& pack) {
490 std::istringstream str(pack.template get<std::string>());
Definition: generator.h:20
T result_type
Definition: generator.h:25
int getRank() const override
Definition: communication.cpp:31
Definition: generator.h:322
DistributedGenerator(result_type seed)
Definition: generator.h:366
DistributedGenerator()
Definition: generator.h:351
void seed(result_type seed) override
Definition: generator.h:375
void discard(unsigned long long z) override
Definition: generator.h:380
static constexpr result_type min()
Definition: generator.h:392
static constexpr result_type max()
Definition: generator.h:401
Generator_t::result_type result_type
Definition: generator.h:345
result_type operator()() override
Definition: generator.h:369
Definition: generator.h:200
Generator(Generator< std::random_device > &&)
Definition: generator.h:230
void seed(std::random_device::result_type) override
Definition: generator.h:258
Generator(std::random_device::result_type)
Definition: generator.h:210
Generator< std::random_device > & operator=(const Generator< std::random_device > &)
Definition: generator.h:240
Generator(const Generator< std::random_device > &)
Definition: generator.h:220
void discard(unsigned long long) override
Definition: generator.h:264
Generator()
Definition: generator.h:205
Generator< std::random_device > & operator=(Generator< std::random_device > &&)
Definition: generator.h:251
Definition: generator.h:113
Generator()
Definition: generator.h:125
bool operator!=(const Generator< Generator_t > &g) const
Definition: generator.h:157
bool operator==(const Generator< Generator_t > &g) const
Definition: generator.h:150
void seed(result_type seed) override
Definition: generator.h:136
friend std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &ost, const Generator< Gen > &g)
Definition: generator.h:79
UniformRandomBitGenerator< Generator_t >::result_type result_type
Definition: generator.h:120
Generator(result_type seed)
Definition: generator.h:131
void discard(unsigned long long z) override
Definition: generator.h:140
friend std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > &ost, Generator< Gen > &g)
Definition: generator.h:97
MpiCommWorld WORLD
Definition: communication.cpp:11
Generator< std::minstd_rand > minstd_rand
Definition: generator.h:294
Generator< std::mt19937 > mt19937
Definition: generator.h:282
std::basic_istream< CharT, Traits > & operator>>(std::basic_istream< CharT, Traits > &ost, Generator< Gen > &g)
Definition: generator.h:97
Generator< std::mt19937_64 > mt19937_64
Definition: generator.h:288
std::basic_ostream< CharT, Traits > & operator<<(std::basic_ostream< CharT, Traits > &ost, const Generator< Gen > &g)
Definition: generator.h:79
Generator< std::random_device > random_device
Definition: generator.h:300
static std::size_t size(const PackType &pack, const fpmas::random::Generator< Generator_t > &gen)
Definition: generator.h:460
static void to_datapack(PackType &pack, const fpmas::random::Generator< Generator_t > &gen)
Definition: generator.h:475
static fpmas::random::Generator< Generator_t > from_datapack(const PackType &pack)
Definition: generator.h:488
Definition: datapack.h:55
static void from_json(const JsonType &j, fpmas::random::Generator< Generator_t > &gen)
Definition: generator.h:438
static void to_json(JsonType &j, const fpmas::random::Generator< Generator_t > &gen)
Definition: generator.h:425