11#ifndef GUDHI_RANDOM_H_
12#define GUDHI_RANDOM_H_
54#if defined( GUDHI_DEFAULT_RANDOM_DLL_EXPORT ) && defined( GUDHI_DEFAULT_RANDOM_DLL_IMPORT )
55#error "GUDHI_DEFAULT_RANDOM_DLL_EXPORT and GUDHI_DEFAULT_RANDOM_DLL_IMPORT cannot be enabled at the same time"
59#define GUDHI_RANDOM_DLL_API
62 #if defined GUDHI_DEFAULT_RANDOM_DLL_EXPORT
63 #define GUDHI_RANDOM_DLL_API __declspec(dllexport)
65 #if defined GUDHI_DEFAULT_RANDOM_DLL_IMPORT
66 #define GUDHI_RANDOM_DLL_API __declspec(dllimport)
69 #if defined GUDHI_DEFAULT_RANDOM_DLL_EXPORT
71 #define GUDHI_RANDOM_DLL_API __attribute__((visibility("default")))
77#if defined GUDHI_DEFAULT_RANDOM_DLL_IMPORT
85 #if !defined GUDHI_DEFAULT_RANDOM_DLL_EXPORT
91 std::clog <<
"get_default_random() " << &default_random <<
"\n";
93 return default_random;
102 void set_seed(Random_generator::result_type seed) {
116 template <
typename Type,
typename CustomRandomGenerator = Random_generator&>
118 if constexpr (std::is_floating_point_v<Type>) {
119 std::uniform_real_distribution<Type> dis(min, max);
121 }
else if constexpr (std::is_integral_v<Type>) {
122 std::uniform_int_distribution<Type> dis(min, max);
138 template <
typename Type,
typename CustomRandomGenerator = Random_generator&>
142 std::vector<Type> result(nbr);
143 if constexpr (std::is_floating_point_v<Type>) {
144 std::uniform_real_distribution<Type> dis(min, max);
145 std::generate(result.begin(), result.end(), [&]() { return dis(rng); });
146 }
else if constexpr (std::is_integral_v<Type>) {
147 std::uniform_int_distribution<Type> dis(min, max);
148 std::generate(result.begin(), result.end(), [&]() { return dis(rng); });
GUDHI_RANDOM_DLL_API Random_generator & get_default_random()
Returns a thread-local default random number generator instance.
Definition random.h:88
void set_seed(Random_generator::result_type seed)
Sets the seed for the default random engine.
Definition random.h:102
std::vector< Type > get_uniform_range(std::size_t nbr, const Type &min, const Type &max, CustomRandomGenerator &&rng=get_default_random())
Generates a vector of N random numbers in the range [min, max].
Definition random.h:139
Type get_uniform(const Type &min, const Type &max, CustomRandomGenerator &&rng=get_default_random())
Generates a random number in the range [min, max].
Definition random.h:117
std::mt19937_64 Random_generator
Definition random.h:52
Gudhi namespace.
Definition SimplicialComplexForAlpha.h:14