From fcca618c48e1d11f7e41acc43939552295cfc780 Mon Sep 17 00:00:00 2001
From: Adrien Beraud <adrien.beraud@savoirfairelinux.com>
Date: Mon, 10 Apr 2017 15:36:25 +0200
Subject: [PATCH] infohash: improve getRandom performance

Generate random hash in 32 bits chunks
instead of 8 bits chunks.
---
 src/infohash.cpp | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/infohash.cpp b/src/infohash.cpp
index d3f8345b..5070abe4 100644
--- a/src/infohash.cpp
+++ b/src/infohash.cpp
@@ -64,12 +64,10 @@ InfoHash::getRandom()
 {
     InfoHash h;
     crypto::random_device rdev;
-#ifdef _WIN32
-    static std::uniform_int_distribution<int> rand_byte{ 0, std::numeric_limits<uint8_t>::max() };
-#else
-    static std::uniform_int_distribution<uint8_t> rand_byte;
-#endif
-    std::generate(h.begin(), h.end(), std::bind(rand_byte, std::ref(rdev)));
+    std::uniform_int_distribution<uint32_t> rand_int;
+    auto a = reinterpret_cast<uint32_t*>(&(*h.begin()));
+    auto b = reinterpret_cast<uint32_t*>(&(*h.end()));
+    std::generate(a, b, std::bind(rand_int, std::ref(rdev)));
     return h;
 }
 
-- 
GitLab