33 #ifndef RANDOM_WRAPPER_HPP
34 #define RANDOM_WRAPPER_HPP
108 virtual void seed(std::size_t s) = 0;
109 virtual void seed(std::seed_seq& s) = 0;
110 virtual void seed(std::uint32_t i, std::uint32_t j) = 0;
111 virtual real_t get() = 0;
112 virtual real_t get(std::uint32_t i, std::uint32_t j) = 0;
113 virtual int flops_per_prng() = 0;
128 template<
typename real_t,
typename E,
typename D>
144 void seed(std::size_t s) { e.seed(s); d.reset(); }
149 void seed(std::seed_seq& s) { e.seed(s); d.reset(); }
156 void seed(std::uint32_t i, std::uint32_t j) {
157 std::seed_seq seq{i,j};
164 real_t
get() {
return d(e); }
169 real_t
get(std::uint32_t i, std::uint32_t j) {
170 std::seed_seq seq{i,j};
180 if (std::is_same<D,std::normal_distribution<real_t>>())
182 if (std::is_same<D,std::uniform_real_distribution<real_t>>())
184 std::cout <<
"ERROR: random distribution not recognized" << std::endl;
203 template<
typename real_t> std::unique_ptr<RandomGeneratorBase<real_t>>
208 return std::unique_ptr<RandomGeneratorBase<real_t>>
210 std::normal_distribution<real_t>>(seed));
212 return std::unique_ptr<RandomGeneratorBase<real_t>>
214 std::uniform_real_distribution<real_t>>(seed));
217 return std::unique_ptr<RandomGeneratorBase<real_t>>
219 std::normal_distribution<real_t>>(seed));
221 return std::unique_ptr<RandomGeneratorBase<real_t>>
223 std::uniform_real_distribution<real_t>>(seed));
238 template<
typename real_t> std::unique_ptr<RandomGeneratorBase<real_t>>
240 return make_random_generator<real_t>(0, e, d);
251 template<
typename real_t> std::unique_ptr<RandomGeneratorBase<real_t>>
253 return make_random_generator<real_t>
260 #endif // RANDOM_WRAPPER