diff --git a/lib_random.h b/lib_random.h new file mode 100644 index 0000000..cd9b55f --- /dev/null +++ b/lib_random.h @@ -0,0 +1,52 @@ +#ifndef RADII_LIB_RANDOM +#define RADII_LIB_RANDOM + +#include +#include + +template class random_number_generator { + std::random_device seed; + std::mt19937_64 generator; + std::uniform_int_distribution range; + T l = std::numeric_limits::min(); + T h = std::numeric_limits::max(); + +public: + random_number_generator(T high = std::numeric_limits::max()); + random_number_generator(T low, T high); + T operator()(); + T operator()(T h); + T operator()(T l, T h); +}; + +template +random_number_generator::random_number_generator(T high) : h(high) { + generator.seed(seed()); + range = std::uniform_int_distribution(l, h); +} + +template +random_number_generator::random_number_generator(T low, T high) + : l(low), h(high) { + generator.seed(seed()); + range = std::uniform_int_distribution(l, h); +} + +template T random_number_generator::operator()() { + return range(generator); +} + +template T random_number_generator::operator()(T high) { + h = high; + range = std::uniform_int_distribution(l, h); + return range(generator); +} + +template T random_number_generator::operator()(T low, T high) { + l = low; + h = high; + range = std::uniform_int_distribution(l, h); + return range(generator); +} + +#endif \ No newline at end of file