46 #ifndef ABSL_RANDOM_DISTRIBUTIONS_H_
47 #define ABSL_RANDOM_DISTRIBUTIONS_H_
53 #include <type_traits>
55 #include "absl/base/internal/inline_variable.h"
56 #include "absl/random/bernoulli_distribution.h"
57 #include "absl/random/beta_distribution.h"
58 #include "absl/random/exponential_distribution.h"
59 #include "absl/random/gaussian_distribution.h"
60 #include "absl/random/internal/distribution_caller.h"
61 #include "absl/random/internal/uniform_helper.h"
62 #include "absl/random/log_uniform_int_distribution.h"
63 #include "absl/random/poisson_distribution.h"
64 #include "absl/random/uniform_int_distribution.h"
65 #include "absl/random/uniform_real_distribution.h"
66 #include "absl/random/zipf_distribution.h"
121 template <
typename R =
void,
typename TagType,
typename URBG>
134 distribution_t>(&urbg,
tag, lo, hi);
141 template <
typename R =
void,
typename URBG>
147 constexpr
auto tag = absl::IntervalClosedOpen;
154 distribution_t>(&urbg, lo, hi);
162 template <
typename R = void,
typename TagType,
typename URBG,
typename A,
165 random_internal::uniform_inferred_return_t<A, B>>
173 auto a = random_internal::uniform_lower_bound<return_t>(
tag, lo, hi);
174 auto b = random_internal::uniform_upper_bound<return_t>(
tag, lo, hi);
178 distribution_t>(&urbg,
tag,
static_cast<return_t
>(lo),
179 static_cast<return_t
>(hi));
187 template <
typename R =
void,
typename URBG,
typename A,
typename B>
189 random_internal::uniform_inferred_return_t<A, B>>
196 constexpr
auto tag = absl::IntervalClosedOpen;
197 auto a = random_internal::uniform_lower_bound<return_t>(
tag, lo, hi);
198 auto b = random_internal::uniform_upper_bound<return_t>(
tag, lo, hi);
202 distribution_t>(&urbg,
static_cast<return_t
>(lo),
203 static_cast<return_t
>(hi));
210 template <
typename R,
typename URBG>
217 distribution_t>(&urbg);
240 template <
typename URBG>
247 distribution_t>(&urbg, p);
267 template <
typename RealType,
typename URBG>
269 RealType alpha, RealType
beta) {
272 "Template-argument 'RealType' must be a floating-point type, in "
273 "absl::Beta<RealType, URBG>(...)");
279 distribution_t>(&urbg, alpha,
beta);
299 template <
typename RealType,
typename URBG>
301 RealType lambda = 1) {
304 "Template-argument 'RealType' must be a floating-point type, in "
305 "absl::Exponential<RealType, URBG>(...)");
311 distribution_t>(&urbg, lambda);
330 template <
typename RealType,
typename URBG>
332 RealType mean = 0, RealType stddev = 1) {
335 "Template-argument 'RealType' must be a floating-point type, in "
336 "absl::Gaussian<RealType, URBG>(...)");
342 distribution_t>(&urbg, mean, stddev);
373 template <
typename IntType,
typename URBG>
375 IntType lo, IntType hi, IntType
base = 2) {
377 "Template-argument 'IntType' must be an integral type, in "
378 "absl::LogUniform<IntType, URBG>(...)");
384 distribution_t>(&urbg, lo, hi,
base);
403 template <
typename IntType,
typename URBG>
407 "Template-argument 'IntType' must be an integral type, in "
408 "absl::Poisson<IntType, URBG>(...)");
414 distribution_t>(&urbg, mean);
434 template <
typename IntType,
typename URBG>
439 "Template-argument 'IntType' must be an integral type, in "
440 "absl::Zipf<IntType, URBG>(...)");
446 distribution_t>(&urbg, hi, q,
v);
452 #endif // ABSL_RANDOM_DISTRIBUTIONS_H_