summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoanna Hulboj <joanna.hulboj@isode.com>2017-03-29 12:43:50 (GMT)
committerTobias Markmann <tm@ayena.de>2017-03-31 09:31:21 (GMT)
commit613d66b9847e9e4338a37b22b230d3177872a43c (patch)
treef8412cb315bb273e6a6d6e3e1a63b803a6aad3a9 /Swiften/Base/StdRandomGenerator.cpp
parent7663ca75731c4313dddbcde4d85f10383644a67a (diff)
downloadswift-613d66b9847e9e4338a37b22b230d3177872a43c.zip
swift-613d66b9847e9e4338a37b22b230d3177872a43c.tar.bz2
Use std::random instead of boost::random
Test-Infotmation: Unit tests pass OK. Change-Id: I1b6d3711d97daa86cccbb44aecb1b4025f2fcc8a
Diffstat (limited to 'Swiften/Base/StdRandomGenerator.cpp')
-rw-r--r--Swiften/Base/StdRandomGenerator.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/Swiften/Base/StdRandomGenerator.cpp b/Swiften/Base/StdRandomGenerator.cpp
new file mode 100644
index 0000000..8b1dee0
--- /dev/null
+++ b/Swiften/Base/StdRandomGenerator.cpp
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2012-2017 Isode Limited.
+ * All rights reserved.
+ * See the COPYING file for more information.
+ */
+
+#include <Swiften/Base/StdRandomGenerator.h>
+
+#include <algorithm>
+#include <functional>
+
+namespace {
+ template<class T = std::mt19937, std::size_t N = T::state_size>
+ typename std::enable_if<!!N, T>::type createSeededRandomEngine() {
+ typename T::result_type random_data[N];
+ std::random_device source;
+ std::generate(std::begin(random_data), std::end(random_data), std::ref(source));
+ std::seed_seq seeds(std::begin(random_data), std::end(random_data));
+ return T(seeds);
+ }
+}
+
+namespace Swift {
+
+StdRandomGenerator::StdRandomGenerator() : generator(createSeededRandomEngine()) {
+}
+
+int StdRandomGenerator::generateRandomInteger(int maximum) {
+ std::uniform_int_distribution<> distribution(0, maximum);
+ return distribution(generator);
+}
+
+}