#include "RNG.h" using std::uniform_int_distribution; using std::uniform_real_distribution; RNG::RNG() : dev(), rng(dev()) { } RNG & RNG::get() { static RNG instance; return instance; } int RNG::rand_int(const int upper) { return this->rand_int(0, upper); } int RNG::rand_int(const int lower, const int upper) { // NOTE: random_dist's upper limit is inclusive uniform_int_distribution random_dist(lower, upper - 1); return random_dist(rng); } int RNG::rand_int(const Range range) { uniform_int_distribution random_dist(range.min, range.max); return random_dist(rng); } double RNG::rand_double() { return this->rand_double(0.f, 1.f); } double RNG::rand_double(const double lower, const double upper) { uniform_real_distribution random_dist(lower, upper); return random_dist(rng); } bool RNG::rand_bool() { return rand_int(0, 1); }