cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
engine.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_RANDOM_ENGINE_H
4#define pRC_CORE_RANDOM_ENGINE_H
5
8
9namespace pRC
10{
11 template<class F>
12 class RandomEngine : public CRTP<F>
13 {
14 public:
15 static constexpr decltype(auto) min()
16 {
17 return F::min();
18 }
19
20 static constexpr decltype(auto) max()
21 {
22 return F::max();
23 }
24
25 public:
26 constexpr decltype(auto) seed()
27 {
28 return this->self().seed();
29 }
30
31 template<Size S>
32 constexpr decltype(auto) seed(SeedSequence<S> const &seq)
33 {
34 return this->self().seed(seq);
35 }
36
37 constexpr decltype(auto) operator()()
38 {
39 return (this->self())();
40 }
41
42 constexpr decltype(auto) discard(std::uint64_t z)
43 {
44 return this->self().discard(z);
45 }
46
47 protected:
48 ~RandomEngine() = default;
49 constexpr RandomEngine(RandomEngine const &) = default;
50 constexpr RandomEngine(RandomEngine &&) = default;
51 constexpr RandomEngine &operator=(RandomEngine const &) = default;
52 constexpr RandomEngine &operator=(RandomEngine &&) = default;
53 constexpr RandomEngine() = default;
54 };
55
56 template<class T>
57 concept IsRandomEngine = !IsReference<T> && requires {
58 {
59 []<class F>(RandomEngine<F> const &&)
60 {
61 }(std::declval<T>())
62 };
63 };
64}
65#endif // pRC_CORE_RANDOM_ENGINE_H
Definition crtp.hpp:12
constexpr decltype(auto) self() &
Definition crtp.hpp:30
Definition engine.hpp:13
constexpr RandomEngine(RandomEngine &&)=default
constexpr RandomEngine(RandomEngine const &)=default
constexpr decltype(auto) discard(std::uint64_t z)
Definition engine.hpp:42
~RandomEngine()=default
static constexpr decltype(auto) min()
Definition engine.hpp:15
constexpr RandomEngine & operator=(RandomEngine const &)=default
constexpr RandomEngine & operator=(RandomEngine &&)=default
constexpr decltype(auto) seed(SeedSequence< S > const &seq)
Definition engine.hpp:32
static constexpr decltype(auto) max()
Definition engine.hpp:20
constexpr decltype(auto) seed()
Definition engine.hpp:26
constexpr RandomEngine()=default
Definition seq.hpp:13
Definition engine.hpp:57
Definition concepts.hpp:19
Uncopyable z
Definition gmock-matchers-containers_test.cc:378
Definition cholesky.hpp:10