statcpp
C++17 Header-Only Statistics Library
Loading...
Searching...
No Matches
random_engine.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <cstdint>
9#include <random>
10#include <type_traits>
11
12namespace statcpp {
13
14// ============================================================================
15// Random Engine Wrapper
16// ============================================================================
17
21using default_random_engine = std::mt19937_64;
22
32{
33 thread_local default_random_engine engine(std::random_device{}());
34 return engine;
35}
36
45inline void set_seed(std::uint64_t seed)
46{
47 get_random_engine().seed(seed);
48}
49
56inline void randomize_seed()
57{
58 get_random_engine().seed(std::random_device{}());
59}
60
68template <typename T>
69struct is_random_engine : std::false_type {};
70
74template <>
75struct is_random_engine<std::mt19937> : std::true_type {};
76
80template <>
81struct is_random_engine<std::mt19937_64> : std::true_type {};
82
86template <>
87struct is_random_engine<std::minstd_rand> : std::true_type {};
88
92template <>
93struct is_random_engine<std::minstd_rand0> : std::true_type {};
94
98template <>
99struct is_random_engine<std::ranlux24_base> : std::true_type {};
100
104template <>
105struct is_random_engine<std::ranlux48_base> : std::true_type {};
106
110template <>
111struct is_random_engine<std::ranlux24> : std::true_type {};
112
116template <>
117struct is_random_engine<std::ranlux48> : std::true_type {};
118
122template <>
123struct is_random_engine<std::knuth_b> : std::true_type {};
124
130template <typename T>
132
133} // namespace statcpp
void randomize_seed()
Randomly reset the random engine seed.
void set_seed(std::uint64_t seed)
Set the seed of the random engine.
default_random_engine & get_random_engine()
Singleton accessor for global random engine.
constexpr bool is_random_engine_v
Variable template version of is_random_engine.
std::mt19937_64 default_random_engine
Default random engine type (Mersenne Twister 64-bit version)
Type trait to determine if a type is a random engine.