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