8 #ifndef IMPKERNEL_RANDOM_H
9 #define IMPKERNEL_RANDOM_H
11 #include <IMP/kernel_config.h>
15 #include <cereal/access.hpp>
17 IMPKERNEL_BEGIN_NAMESPACE
19 #ifndef SWIG // the RNG is defined explicitly in pyext/IMP_kernel.random.i
21 class RandomNumberGenerator :
public std::mt19937 {
22 typedef std::mt19937 T;
23 T::result_type last_seed_;
24 unsigned seed_counter_;
26 friend class cereal::access;
27 template<
class Archive>
void serialize(Archive &ar) {
28 ar(last_seed_, seed_counter_);
32 if (std::is_base_of<cereal::detail::InputArchiveBase, Archive>::value) {
35 std::istringstream iss(rstate);
38 std::ostringstream oss;
45 RandomNumberGenerator()
46 : T(default_seed), last_seed_(default_seed), seed_counter_(1) {}
48 RandomNumberGenerator(T::result_type seed)
49 : T(seed), last_seed_(seed), seed_counter_(1) {}
51 void seed() { seed(default_seed); }
54 void seed(T::result_type seed) {
57 if (seed_counter_ == 0) {
65 T::result_type get_last_seed()
const {
return last_seed_; }
70 unsigned get_seed_counter()
const {
return seed_counter_; }
96 IMPKERNEL_END_NAMESPACE
boost::uint64_t get_random_seed()
Return the initial random seed.
A class for storing lists of IMP items.
RandomNumberGenerator random_number_generator
A shared non-GPU random number generator.