#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