summaryrefslogtreecommitdiff
path: root/src/generic/random.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/generic/random.hpp')
-rw-r--r--src/generic/random.hpp14
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