4 #ifndef INDIGOX_UTILS_QUAD_HPP 5 #define INDIGOX_UTILS_QUAD_HPP 11 template <
class _T1,
class _T2 = _T1,
class _T3 = _T2,
class _T4 = _T3>
28 inline constexpr
quad(_T1
const &__t1, _T2
const &__t2, _T3
const &__t3,
32 template <
class _U1,
class _U2,
class _U3,
class _U4>
33 inline constexpr
quad(_U1 &&__u1, _U2 &&__u2, _U3 &&__u3, _U4 &&__u4)
34 :
first(std::forward<_U1>(__u1)),
second(std::forward<_U2>(__u2)),
35 third(std::forward<_U3>(__u3)),
fourth(std::forward<_U4>(__u4)) {}
37 template <
class _U1,
class _U2,
class _U3,
class _U4>
42 template <
class _U1,
class _U2,
class _U3,
class _U4>
50 typename std::conditional<
51 std::is_copy_assignable<first_type>::value &&
52 std::is_copy_assignable<second_type>::value &&
53 std::is_copy_assignable<third_type>::value &&
54 std::is_copy_assignable<fourth_type>::value,
56 &__p) noexcept(std::is_nothrow_copy_assignable<first_type>::value
57 &&std::is_nothrow_copy_assignable<second_type>::
58 value &&std::is_nothrow_copy_assignable<
60 &&std::is_nothrow_copy_assignable<
70 typename std::conditional<
71 std::is_move_assignable<first_type>::value &&
72 std::is_move_assignable<second_type>::value &&
73 std::is_move_assignable<third_type>::value &&
74 std::is_move_assignable<fourth_type>::value,
76 &&__p) noexcept(std::is_nothrow_move_assignable<first_type>::value
77 &&std::is_nothrow_move_assignable<second_type>::
78 value &&std::is_nothrow_move_assignable<
80 &&std::is_nothrow_move_assignable<
82 first = std::forward<first_type>(__p.first);
83 second = std::forward<second_type>(__p.second);
84 third = std::forward<third_type>(__p.third);
85 fourth = std::forward<fourth_type>(__p.fourth);
90 std::is_nothrow_swappable<first_type>::value
91 &&std::is_nothrow_swappable<second_type>::value
92 &&std::is_nothrow_swappable<third_type>::value
93 &&std::is_nothrow_swappable<fourth_type>::value) {
101 template <
typename Archive>
110 template <
class _T1,
class _T2,
class _T3,
class _T4>
117 template <
class _T1,
class _T2,
class _T3,
class _T4>
120 return !(__x == __y);
123 template <
class _T1,
class _T2,
class _T3,
class _T4>
134 template <
class _T1,
class _T2,
class _T3,
class _T4>
140 template <
class _T1,
class _T2,
class _T3,
class _T4>
146 template <
class _T1,
class _T2,
class _T3,
class _T4>
152 template <
class _T1,
class _T2,
class _T3,
class _T4>
153 inline typename std::enable_if<
154 std::is_swappable<_T1>::value && std::is_swappable<_T2>::value &&
155 std::is_swappable<_T3>::value && std::is_swappable<_T4>::value,
158 (std::is_nothrow_swappable<_T1>::value &&
159 std::is_nothrow_swappable<_T2>::value &&
160 std::is_nothrow_swappable<_T3>::value &&
161 std::is_nothrow_swappable<_T4>::value)) {
178 template <
class _T1,
class _T2,
class _T3,
class _T4>
183 make_quad(_T1 &&__t1, _T2 &&__t2, _T3 &&__t3, _T4 &&__t4) {
188 std::forward<_T1>(__t1), std::forward<_T2>(__t2),
189 std::forward<_T3>(__t3), std::forward<_T4>(__t4));
quad & operator=(typename std::conditional< std::is_move_assignable< first_type >::value &&std::is_move_assignable< second_type >::value &&std::is_move_assignable< third_type >::value &&std::is_move_assignable< fourth_type >::value, quad, stdx::typeless >::type &&__p) noexcept(std::is_nothrow_move_assignable< first_type >::value &&std::is_nothrow_move_assignable< second_type >::value &&std::is_nothrow_move_assignable< third_type >::value &&std::is_nothrow_move_assignable< fourth_type >::value)
Definition: quad.hpp:69
_T3 third_type
Definition: quad.hpp:15
void swap(quad &__p) noexcept(std::is_nothrow_swappable< first_type >::value &&std::is_nothrow_swappable< second_type >::value &&std::is_nothrow_swappable< third_type >::value &&std::is_nothrow_swappable< fourth_type >::value)
Definition: quad.hpp:89
std::enable_if< std::is_swappable< _T1 >::value &&std::is_swappable< _T2 >::value &&std::is_swappable< _T3 >::value &&std::is_swappable< _T4 >::value, void >::type swap(quad< _T1, _T2, _T3, _T4 > &__x, quad< _T1, _T2, _T3, _T4 > &__y) noexcept((std::is_nothrow_swappable< _T1 >::value &&std::is_nothrow_swappable< _T2 >::value &&std::is_nothrow_swappable< _T3 >::value &&std::is_nothrow_swappable< _T4 >::value))
Definition: quad.hpp:157
constexpr bool operator>(const quad< _T1, _T2, _T3, _T4 > &__x, const quad< _T1, _T2, _T3, _T4 > &__y)
Definition: quad.hpp:135
quad & operator=(typename std::conditional< std::is_copy_assignable< first_type >::value &&std::is_copy_assignable< second_type >::value &&std::is_copy_assignable< third_type >::value &&std::is_copy_assignable< fourth_type >::value, quad, stdx::typeless >::type const &__p) noexcept(std::is_nothrow_copy_assignable< first_type >::value &&std::is_nothrow_copy_assignable< second_type >::value &&std::is_nothrow_copy_assignable< third_type >::value &&std::is_nothrow_copy_assignable< fourth_type >::value)
Definition: quad.hpp:49
constexpr quad(quad< _U1, _U2, _U3, _U4 > &&__p)
Definition: quad.hpp:43
_T3 third
Definition: quad.hpp:20
constexpr quad()
Definition: quad.hpp:26
_Tp type
Definition: quad.hpp:165
_T4 fourth_type
Definition: quad.hpp:16
void serialise(Archive &archive, const uint32_t)
Definition: quad.hpp:102
#define INDIGOX_SERIAL_NVP(name, value)
Definition: serialise.hpp:66
constexpr quad(_U1 &&__u1, _U2 &&__u2, _U3 &&__u3, _U4 &&__u4)
Definition: quad.hpp:33
constexpr bool operator<(const quad< _T1, _T2, _T3, _T4 > &__x, const quad< _T1, _T2, _T3, _T4 > &__y)
Definition: quad.hpp:124
__make_quad_return_impl< typename std::decay< _Tp >::type >::type type
Definition: quad.hpp:175
constexpr quad(quad< _U1, _U2, _U3, _U4 > const &__p)
Definition: quad.hpp:38
constexpr bool operator!=(const quad< _T1, _T2, _T3, _T4 > &__x, const quad< _T1, _T2, _T3, _T4 > &__y)
Definition: quad.hpp:118
_T2 second
Definition: quad.hpp:19
Definition: serialise.hpp:24
_T1 first_type
Definition: quad.hpp:13
_Tp & type
Definition: quad.hpp:169
constexpr quad(_T1 const &__t1, _T2 const &__t2, _T3 const &__t3, _T4 const &__t4)
Definition: quad.hpp:28
_T4 fourth
Definition: quad.hpp:21
_T2 second_type
Definition: quad.hpp:14
constexpr quad< typename __make_quad_return< _T1 >::type, typename __make_quad_return< _T2 >::type, typename __make_quad_return< _T3 >::type, typename __make_quad_return< _T4 >::type > make_quad(_T1 &&__t1, _T2 &&__t2, _T3 &&__t3, _T4 &&__t4)
Definition: quad.hpp:183
_T1 first
Definition: quad.hpp:18
constexpr bool operator>=(const quad< _T1, _T2, _T3, _T4 > &__x, const quad< _T1, _T2, _T3, _T4 > &__y)
Definition: quad.hpp:141
constexpr bool operator<=(const quad< _T1, _T2, _T3, _T4 > &__x, const quad< _T1, _T2, _T3, _T4 > &__y)
Definition: quad.hpp:147
constexpr bool operator==(const quad< _T1, _T2, _T3, _T4 > &__x, const quad< _T1, _T2, _T3, _T4 > &__y)
Definition: quad.hpp:111