+bool Random::write_state(std::string filename)
+{
+ std::ofstream file(filename);
+ if (file) {
+ file << mt19937_gen;
+ return true;
+ } else {
+ XBT_WARN("Could not open %s and thus not read the RNG state.", filename.c_str());
+ return false;
+ }
+}
+
+int StdRandom::uniform_int(int min, int max)
+{
+ std::uniform_int_distribution<> dist(min, max);
+ return dist(mt19937_gen);
+}
+
+double StdRandom::uniform_real(double min, double max)
+{
+ std::uniform_real_distribution<> dist(min, max);
+ return dist(mt19937_gen);
+}
+
+double StdRandom::exponential(double lambda)
+{
+ std::exponential_distribution<> dist(lambda);
+ return dist(mt19937_gen);
+}
+
+double StdRandom::normal(double mean, double sd)
+{
+ std::normal_distribution<> dist(mean, sd);
+ return dist(mt19937_gen);
+}
+
+int XbtRandom::uniform_int(int min, int max)
+{
+ unsigned long range = max - min + 1;
+ xbt_assert(min <= max,
+ "The minimum value for the uniform integer distribution must not be greater than the maximum value");
+ xbt_assert(range > 0, "Overflow in the uniform integer distribution, please use a smaller range.");
+ unsigned long value;
+ do {
+ value = mt19937_gen();
+ } while (value >= decltype(mt19937_gen)::max() - decltype(mt19937_gen)::max() % range);
+ return value % range + min;
+}
+
+double XbtRandom::uniform_real(double min, double max)