diff options
Diffstat (limited to 'src/common/Utilities/Random.cpp')
-rw-r--r-- | src/common/Utilities/Random.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/common/Utilities/Random.cpp b/src/common/Utilities/Random.cpp index 974f13db0be..5a4004b41bd 100644 --- a/src/common/Utilities/Random.cpp +++ b/src/common/Utilities/Random.cpp @@ -22,7 +22,7 @@ #include <random> static boost::thread_specific_ptr<SFMTRand> sfmtRand; -static SFMTEngine engine; +static RandomEngine engine; static SFMTRand* GetRng() { @@ -40,26 +40,28 @@ static SFMTRand* GetRng() int32 irand(int32 min, int32 max) { ASSERT(max >= min); - return int32(GetRng()->IRandom(min, max)); + std::uniform_int_distribution<int32> uid(min, max); + return uid(engine); } uint32 urand(uint32 min, uint32 max) { ASSERT(max >= min); - return GetRng()->URandom(min, max); + std::uniform_int_distribution<uint32> uid(min, max); + return uid(engine); } uint32 urandms(uint32 min, uint32 max) { - ASSERT(max >= min); ASSERT(std::numeric_limits<uint32>::max() / Milliseconds::period::den >= max); - return GetRng()->URandom(min * Milliseconds::period::den, max * Milliseconds::period::den); + return urand(min * Milliseconds::period::den, max * Milliseconds::period::den); } float frand(float min, float max) { ASSERT(max >= min); - return float(GetRng()->Random() * (max - min) + min); + std::uniform_real_distribution<float> urd(min, max); + return urd(engine); } Milliseconds randtime(Milliseconds min, Milliseconds max) @@ -72,26 +74,28 @@ Milliseconds randtime(Milliseconds min, Milliseconds max) uint32 rand32() { - return GetRng()->BRandom(); + return GetRng()->RandomUInt32(); } double rand_norm() { - return GetRng()->Random(); + std::uniform_real_distribution<double> urd; + return urd(engine); } double rand_chance() { - return GetRng()->Random() * 100.0; + std::uniform_real_distribution<double> urd(0.0, 100.0); + return urd(engine); } uint32 urandweighted(size_t count, double const* chances) { std::discrete_distribution<uint32> dd(chances, chances + count); - return dd(SFMTEngine::Instance()); + return dd(engine); } -SFMTEngine& SFMTEngine::Instance() +RandomEngine& RandomEngine::Instance() { return engine; } |