aboutsummaryrefslogtreecommitdiff
path: root/src/random.h
diff options
context:
space:
mode:
authorMarcoFalke <falke.marco@gmail.com>2022-04-08 12:56:25 +0200
committerMacroFake <falke.marco@gmail.com>2022-05-08 11:47:55 +0200
commitfa4fb8d98b7e8e5ea2db35bf239fa7f248da5d8e (patch)
tree4d61028adf2afa3f80429b3bd2386ceac524de48 /src/random.h
parentfaa5c62967174f1dd66e8a4ba61ab29c867cf450 (diff)
downloadbitcoin-fa4fb8d98b7e8e5ea2db35bf239fa7f248da5d8e.tar.xz
random: Add FastRandomContext::rand_uniform_delay
Diffstat (limited to 'src/random.h')
-rw-r--r--src/random.h11
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; }