diff options
Diffstat (limited to 'src/generic/random.hpp')
-rw-r--r-- | src/generic/random.hpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/generic/random.hpp b/src/generic/random.hpp index 897ad43..7310e21 100644 --- a/src/generic/random.hpp +++ b/src/generic/random.hpp @@ -33,8 +33,10 @@ namespace random_ { /// Get a random number from 0 .. 2**32 - 1 extern std::mt19937 generate; + extern std::mt19937_64 generate64; /// Get a random number from 0 .. bound - 1 + // TODO: Deduplicate this. inline int to(int bound) { @@ -42,6 +44,13 @@ namespace random_ return dist(generate); } + inline + int64_t to(int64_t bound) + { + std::uniform_int_distribution<int64_t> dist(0, bound - 1); + return dist(generate64); + } + /// Get a random number from low .. high (inclusive!) inline int in(int low, int high) @@ -58,8 +67,9 @@ namespace random_ return dist(generate); } + template<typename T = int> inline - bool chance(Fraction f) + bool chance(Fraction<T> f) { if (f.num <= 0) return false; @@ -75,7 +85,7 @@ namespace random_ template<class C> auto choice(C&& c) -> decltype(*c.begin()) { - return *(c.begin() + random_::to(c.size())); + return *(c.begin() + random_::to((int64_t)c.size())); } // allow bare braces |