diff options
author | MarcoFalke <falke.marco@gmail.com> | 2022-04-08 12:56:25 +0200 |
---|---|---|
committer | MacroFake <falke.marco@gmail.com> | 2022-05-08 11:47:55 +0200 |
commit | fa4fb8d98b7e8e5ea2db35bf239fa7f248da5d8e (patch) | |
tree | 4d61028adf2afa3f80429b3bd2386ceac524de48 /src/random.h | |
parent | faa5c62967174f1dd66e8a4ba61ab29c867cf450 (diff) | |
download | bitcoin-fa4fb8d98b7e8e5ea2db35bf239fa7f248da5d8e.tar.xz |
random: Add FastRandomContext::rand_uniform_delay
Diffstat (limited to 'src/random.h')
-rw-r--r-- | src/random.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/random.h b/src/random.h index 285158b1c3..4679a2b40c 100644 --- a/src/random.h +++ b/src/random.h @@ -223,6 +223,17 @@ public: /** Generate a random boolean. */ bool randbool() noexcept { return randbits(1); } + /** Return the time point advanced by a uniform random duration. */ + 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; + } + // Compatibility with the C++11 UniformRandomBitGenerator concept typedef uint64_t result_type; static constexpr uint64_t min() { return 0; } |