diff options
author | MacroFake <falke.marco@gmail.com> | 2022-05-10 09:08:49 +0200 |
---|---|---|
committer | MacroFake <falke.marco@gmail.com> | 2022-07-13 15:21:12 +0200 |
commit | fa74e726c414f5f7a1e63126a69463491f66e0ec (patch) | |
tree | 63e6cb2d5b8e5fda4050c5476aeb4f192f0a4eab /src/random.h | |
parent | fa3b3cb9b5d944d34b1d5ac3e102ac333482a475 (diff) | |
download | bitcoin-fa74e726c414f5f7a1e63126a69463491f66e0ec.tar.xz |
refactor: Make FEELER_SLEEP_WINDOW type safe (std::chrono)
Diffstat (limited to 'src/random.h')
-rw-r--r-- | src/random.h | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/random.h b/src/random.h index b92c29f0be..5fe20c5f76 100644 --- a/src/random.h +++ b/src/random.h @@ -11,6 +11,7 @@ #include <span.h> #include <uint256.h> +#include <cassert> #include <chrono> #include <cstdint> #include <limits> @@ -236,13 +237,19 @@ public: template <typename Tp> Tp rand_uniform_delay(const Tp& time, typename Tp::duration range) { - using Dur = typename Tp::duration; - Dur dur{range.count() > 0 ? /* interval [0..range) */ Dur{randrange(range.count())} : - range.count() < 0 ? /* interval (range..0] */ -Dur{randrange(-range.count())} : - /* interval [0..0] */ Dur{0}}; - return time + dur; + return time + rand_uniform_duration<Tp>(range); } + /** Generate a uniform random duration in the range from 0 (inclusive) to range (exclusive). */ + template <typename Chrono> + typename Chrono::duration rand_uniform_duration(typename Chrono::duration range) noexcept + { + using Dur = typename Chrono::duration; + return range.count() > 0 ? /* interval [0..range) */ Dur{randrange(range.count())} : + range.count() < 0 ? /* interval (range..0] */ -Dur{randrange(-range.count())} : + /* interval [0..0] */ Dur{0}; + }; + // Compatibility with the C++11 UniformRandomBitGenerator concept typedef uint64_t result_type; static constexpr uint64_t min() { return 0; } |