cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
basics.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_BASIC_BASICS_H
4#define pRC_CORE_BASIC_BASICS_H
5
6#include <cstdint>
7#include <functional>
8#include <type_traits>
9#include <utility>
10
11#include <prc/std.hpp>
12
13namespace pRC
14{
15 using std::declval;
16 using std::forward;
17 using std::get;
18 using std::move;
19 using std::swap;
20 using std::tie;
21
22 template<class... Ts>
23 using Tuple = std::tuple<Ts...>;
24
25 template<std::size_t I, class T>
26 using TupleElement = std::tuple_element_t<I, T>;
27
28 using Void = void;
29 using Bool = bool;
30
31 using Size = std::size_t;
32 using Index = Size;
33 using Seed = std::uint32_t;
34
35 class Undefined;
36
37 template<class T, T V>
38 using Constant = std::integral_constant<T, V>;
39
40 template<class T>
41 using RemoveReference = std::remove_reference_t<T>;
42
43 template<class T>
44 using RemoveConst = std::remove_const_t<T>;
45
46 template<class T>
48
49 template<class T>
50 using AddConst = std::add_const_t<T>;
51
52 template<class... Ts>
53 using Common = std::common_type_t<Ts...>;
54
55 template<Bool B, class T, class F>
56 using Conditional = std::conditional_t<B, T, F>;
57
58 template<class F, class... Args>
59 using ResultOf = std::invoke_result_t<F, Args...>;
60
61 template<class T>
62 using UnderlyingType = std::underlying_type_t<T>;
63
64 template<class... Xs>
65 static inline constexpr auto forwardAsTuple(Xs &&...args)
66 {
67 return Tuple<Xs &&...>(forward<Xs>(args)...);
68 }
69
70 template<class X>
71 static inline constexpr AddConst<X> &asConst(X &a)
72 {
73 return a;
74 }
75
76 template<class X>
77 static inline constexpr RemoveConst<X> asConst(X &&a)
78 {
79 return forward<X>(a);
80 }
81
82 template<class X>
83 static inline constexpr RemoveConst<X> as(X &&a)
84 {
85 return forward<X>(a);
86 }
87}
88#endif // pRC_CORE_BASIC_BASICS_H
Definition cholesky.hpp:10
std::uint32_t Seed
Definition basics.hpp:33
std::underlying_type_t< T > UnderlyingType
Definition basics.hpp:62
Size Index
Definition basics.hpp:32
std::size_t Size
Definition basics.hpp:31
std::tuple< Ts... > Tuple
Definition basics.hpp:23
std::invoke_result_t< F, Args... > ResultOf
Definition basics.hpp:59
std::remove_reference_t< T > RemoveReference
Definition basics.hpp:41
std::tuple_element_t< I, T > TupleElement
Definition basics.hpp:26
static constexpr AddConst< X > & asConst(X &a)
Definition basics.hpp:71
static constexpr auto forwardAsTuple(Xs &&...args)
Definition basics.hpp:65
std::common_type_t< Ts... > Common
Definition basics.hpp:53
std::remove_const_t< T > RemoveConst
Definition basics.hpp:44
void Void
Definition basics.hpp:28
RemoveConst< RemoveReference< T > > RemoveConstReference
Definition basics.hpp:47
std::integral_constant< T, V > Constant
Definition basics.hpp:38
std::conditional_t< B, T, F > Conditional
Definition basics.hpp:56
static constexpr RemoveConst< X > as(X &&a)
Definition basics.hpp:83
std::add_const_t< T > AddConst
Definition basics.hpp:50
Definition gtest_pred_impl_unittest.cc:54