You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.3 KiB
C++

#ifndef RADII_LIB_RANDOM
#define RADII_LIB_RANDOM
#include <limits>
#include <random>
template <typename T = unsigned long> class random_number_generator {
std::random_device seed;
std::mt19937_64 generator;
std::uniform_int_distribution<T> range;
T l = std::numeric_limits<T>::min();
T h = std::numeric_limits<T>::max();
public:
random_number_generator(T high = std::numeric_limits<T>::max());
random_number_generator(T low, T high);
T operator()();
T operator()(T h);
T operator()(T l, T h);
};
template <typename T>
random_number_generator<T>::random_number_generator(T high) : h(high) {
generator.seed(seed());
range = std::uniform_int_distribution<T>(l, h);
}
template <typename T>
random_number_generator<T>::random_number_generator(T low, T high)
: l(low), h(high) {
generator.seed(seed());
range = std::uniform_int_distribution<T>(l, h);
}
template <typename T> T random_number_generator<T>::operator()() {
return range(generator);
}
template <typename T> T random_number_generator<T>::operator()(T high) {
h = high;
range = std::uniform_int_distribution<T>(l, h);
return range(generator);
}
template <typename T> T random_number_generator<T>::operator()(T low, T high) {
l = low;
h = high;
range = std::uniform_int_distribution<T>(l, h);
return range(generator);
}
#endif