X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0f14a8aa6fecc78bf48d772d3a5cb123a5f7ce4f..3f9b311ec56db95ec539001a860ae3c838c48312:/include/xbt/random.hpp diff --git a/include/xbt/random.hpp b/include/xbt/random.hpp index 8175c69ac5..a5c4c7906f 100644 --- a/include/xbt/random.hpp +++ b/include/xbt/random.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2019-2020. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2019-2023. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -7,11 +7,12 @@ #define SIMGRID_XBT_RANDOM_HPP #include "xbt/base.h" +#include +#include #include +#include -namespace simgrid { -namespace xbt { -namespace random { +namespace simgrid::xbt::random { /** A random number generator. * @@ -25,7 +26,7 @@ public: /** @brief Build a new random number generator with default seed */ Random() = default; /** @brief Build a new random number generator with given seed */ - Random(int seed) : mt19937_gen(seed) {} + explicit Random(int seed) : mt19937_gen(seed) {} virtual ~Random() = default; @@ -34,6 +35,16 @@ public: */ void set_seed(int seed) { mt19937_gen.seed(seed); } + /** + * @brief Read the state of the Mersenne-Twister RNG from a file + */ + bool read_state(const std::string& filename); + + /** + * @brief Write the state of the Mersenne-Twister RNG to a file + */ + bool write_state(const std::string& filename) const; + /** * @brief Draws an integer number uniformly in range [min, max] (min and max included) * @@ -72,8 +83,7 @@ public: */ class XBT_PUBLIC StdRandom : public Random { public: - StdRandom() = default; - StdRandom(int seed) : Random(seed) {} + using Random::Random; int uniform_int(int min, int max) override; double uniform_real(double min, double max) override; @@ -87,8 +97,7 @@ public: */ class XBT_PUBLIC XbtRandom : public Random { public: - XbtRandom() = default; - XbtRandom(int seed) : Random(seed) {} + using Random::Random; int uniform_int(int min, int max) override; double uniform_real(double min, double max) override; @@ -111,6 +120,16 @@ void set_implem_std(); */ void set_mersenne_seed(int); +/** + * @brief Read the state of the Mersenne-Twister RNG from a file. + */ +bool read_mersenne_state(const std::string& filename); + +/** + * @brief Write the state of the Mersenne-Twister RNG to a file. + */ +bool write_mersenne_state(const std::string& filename); + /** * @brief Draws an integer number uniformly in range [min, max] (min and max included) * @@ -141,8 +160,6 @@ double exponential(double lambda); * @param sd Standard deviation of the normal distribution */ double normal(double mean, double sd); -} // namespace random -} // namespace xbt -} // namespace simgrid +} // namespace simgrid::xbt::random #endif