aboutsummaryrefslogtreecommitdiff
path: root/src/common/Utilities/Random.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-03-21 21:04:01 +0100
committerShauren <shauren.trinity@gmail.com>2017-03-21 21:04:01 +0100
commita1e3b54e076bf0361d23ace53703a4e501354d7c (patch)
tree8831e0f556df1d49c727cbedd3857a2258906eae /src/common/Utilities/Random.cpp
parent9cc5273cd27069d7abb8538eca20f429801b6f00 (diff)
Core/Utils: Changed all Trinity::Containers utilities to work on all container types (including arrays where it makes sense)
* Added MapGetValuePtr to allow writing `if (Val* v = MapGetValuePtr(map, key))` * Added utility IteratorPair class with begin/end methods and MapEqualRange for use in range for syntax with multimaps
Diffstat (limited to 'src/common/Utilities/Random.cpp')
-rw-r--r--src/common/Utilities/Random.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/common/Utilities/Random.cpp b/src/common/Utilities/Random.cpp
index defe43d82c2..3a0cdedcf4b 100644
--- a/src/common/Utilities/Random.cpp
+++ b/src/common/Utilities/Random.cpp
@@ -20,8 +20,10 @@
#include "Errors.h"
#include "SFMT.h"
#include <boost/thread/tss.hpp>
+#include <random>
static boost::thread_specific_ptr<SFMTRand> sfmtRand;
+static SFMTEngine engine;
static SFMTRand* GetRng()
{
@@ -84,8 +86,13 @@ double rand_chance()
return GetRng()->Random() * 100.0;
}
+uint32 urandweighted(size_t count, double const* chances)
+{
+ std::discrete_distribution<uint32> dd(chances, chances + count);
+ return dd(SFMTEngine::Instance());
+}
+
SFMTEngine& SFMTEngine::Instance()
{
- static SFMTEngine engine;
return engine;
}