Clio  develop
The XRP Ledger API server.
Loading...
Searching...
No Matches
Random.hpp
1#pragma once
2
3#include "util/Assert.hpp"
4
5#include <cstddef>
6#include <random>
7
8namespace util {
9
14public:
15 virtual ~RandomGeneratorInterface() = default;
16
17 using SeedType = typename std::mt19937_64::result_type;
18
26 [[nodiscard]]
27 virtual size_t
28 uniform(size_t min, size_t max) = 0;
29
35 virtual void
36 setSeed(SeedType seed) = 0;
37};
38
42class MTRandomGenerator : public RandomGeneratorInterface {
43public:
44 MTRandomGenerator();
45
53 [[nodiscard]]
54 size_t
55 uniform(size_t min, size_t max) override;
56
65 template <typename T>
66 [[nodiscard]]
67 T
68 uniformImpl(T min, T max)
69 {
70 ASSERT(min <= max, "Min cannot be greater than max. min: {}, max: {}", min, max);
71 if constexpr (std::is_floating_point_v<T>) {
72 std::uniform_real_distribution<T> distribution(min, max);
73 return distribution(generator_);
74 }
75 std::uniform_int_distribution<T> distribution(min, max);
76 return distribution(generator_);
77 }
78
84 void
85 setSeed(SeedType seed) override;
86
87private:
88 std::mt19937_64 generator_;
89};
90
91} // namespace util
T uniformImpl(T min, T max)
Generate a random number between min and max.
Definition Random.hpp:68
void setSeed(SeedType seed) override
Set the seed for the random number generator.
Definition Random.cpp:21
size_t uniform(size_t min, size_t max) override
Generate a random number between min and max.
Definition Random.cpp:15
Random number generator interface.
Definition Random.hpp:13
virtual size_t uniform(size_t min, size_t max)=0
Generate a random number between min and max.
virtual void setSeed(SeedType seed)=0
Set the seed for the random number generator.
This namespace contains various utilities.
Definition AccountUtils.hpp:11