16 #include <type_traits> 18 #include <meta/meta.hpp> 26 #define SEQAN_NOT_POD "If you are not going to insert a POD type, use std::tuple instead." 30 template <
typename ...types>
55 template <
typename type0,
typename ...types>
58 static_assert(std::is_pod_v<type0>, SEQAN_NOT_POD);
70 constexpr
bool operator==(
pod_tuple const & rhs)
const noexcept
112 template <
typename type0>
115 static_assert(std::is_pod_v<type0>, SEQAN_NOT_POD);
126 constexpr
bool operator==(
pod_tuple const & rhs)
const noexcept
129 return _head == rhs._head;
135 return _head != rhs._head;
141 return _head < rhs._head;
147 return _head > rhs._head;
153 return _head <= rhs._head;
159 return _head >= rhs._head;
168 template <
typename ...types>
169 pod_tuple(types && ...) -> pod_tuple<types...>;
180 requires i <
sizeof...(types)
182 if constexpr (i == 0)
191 requires i <
sizeof...(types)
193 if constexpr (i == 0)
203 requires i <
sizeof...(types)
205 if constexpr (i == 0)
206 return std::move(t._head);
214 requires i <
sizeof...(types)
216 if constexpr (i == 0)
217 return std::move(t._head);
232 template <
typename type,
typename ...types>
235 requires meta::in<meta::list<types...>, type>::value &&
236 (meta::find_index<meta::list<types...>, type>::value ==
237 meta::reverse_find_index<meta::list<types...>, type>::value)
239 return seqan3::get<meta::find_index<meta::list<types...>, type>::value>(t);
243 template <
typename type,
typename ...types>
245 requires meta::in<meta::list<types...>, type>::value &&
246 (meta::find_index<meta::list<types...>, type>::value ==
247 meta::reverse_find_index<meta::list<types...>, type>::value)
249 return seqan3::get<meta::find_index<meta::list<types...>, type>::value>(t);
253 template <
typename type,
typename ...types>
255 requires meta::in<meta::list<types...>, type>::value &&
256 (meta::find_index<meta::list<types...>, type>::value ==
257 meta::reverse_find_index<meta::list<types...>, type>::value)
259 return seqan3::get<meta::find_index<meta::list<types...>, type>::value>(std::move(t));
263 template <
typename type,
typename ...types>
265 requires meta::in<meta::list<types...>, type>::value &&
266 (meta::find_index<meta::list<types...>, type>::value ==
267 meta::reverse_find_index<meta::list<types...>, type>::value)
269 return seqan3::get<meta::find_index<meta::list<types...>, type>::value>(std::move(t));
281 requires i <
sizeof...(types)
283 return seqan3::get<i>(t);
288 requires i <
sizeof...(types)
290 return seqan3::get<i>(t);
295 requires i <
sizeof...(types)
297 return seqan3::get<i>(std::move(t));
302 requires i <
sizeof...(types)
304 return seqan3::get<i>(std::move(t));
307 template <
typename type,
typename ...types>
309 requires meta::in<meta::list<types...>, type>::value &&
310 (meta::find_index<meta::list<types...>, type>::value ==
311 meta::reverse_find_index<meta::list<types...>, type>::value)
313 return seqan3::get<type>(t);
316 template <
typename type,
typename ...types>
318 requires meta::in<meta::list<types...>, type>::value &&
319 (meta::find_index<meta::list<types...>, type>::value ==
320 meta::reverse_find_index<meta::list<types...>, type>::value)
322 return seqan3::get<type>(t);
325 template <
typename type,
typename ...types>
327 requires meta::in<meta::list<types...>, type>::value &&
328 (meta::find_index<meta::list<types...>, type>::value ==
329 meta::reverse_find_index<meta::list<types...>, type>::value)
331 return seqan3::get<type>(std::move(t));
334 template <
typename type,
typename ...types>
336 requires meta::in<meta::list<types...>, type>::value &&
337 (meta::find_index<meta::list<types...>, type>::value ==
338 meta::reverse_find_index<meta::list<types...>, type>::value)
340 return seqan3::get<type>(std::move(t));
349 template <
std::size_t i,
template <
typename...>
typename t,
typename ...types >
350 requires i <
sizeof...(types) &&
352 struct tuple_element<i, t<types...>>
354 using type = meta::at_c<meta::list<types...>, i>;
362 template <
template <
typename...>
typename t,
typename ...types >
364 struct tuple_size<t<types...>> :
constexpr bool operator>(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than rhs.
Definition: pod_tuple.hpp:145
constexpr bool operator<(pod_tuple const &rhs) const noexcept
Checks whether *this is less than rhs.
Definition: pod_tuple.hpp:83
constexpr bool operator<(pod_tuple const &rhs) const noexcept
Checks whether *this is less than rhs.
Definition: pod_tuple.hpp:139
constexpr bool operator>(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than rhs.
Definition: pod_tuple.hpp:89
constexpr bool operator>=(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than or equal to rhs.
Definition: pod_tuple.hpp:101
SeqAn specific customisations in the standard namespace.
constexpr auto const & get(configuration< configs_t... > const &config) noexcept
Definition: configuration.hpp:578
The main SeqAn3 namespace.
constexpr bool operator<=(pod_tuple const &rhs) const noexcept
Checks whether *this is less than or equal to rhs.
Definition: pod_tuple.hpp:95
constexpr bool operator!=(pod_tuple const &rhs) const noexcept
Checks whether *this is not equal to rhs.
Definition: pod_tuple.hpp:77
constexpr bool operator!=(pod_tuple const &rhs) const noexcept
Checks whether *this is not equal to rhs.
Definition: pod_tuple.hpp:133
cond
Definition: pod_tuple.hpp:31
constexpr bool operator<=(pod_tuple const &rhs) const noexcept
Checks whether *this is less than or equal to rhs.
Definition: pod_tuple.hpp:151
constexpr bool operator>=(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than or equal to rhs.
Definition: pod_tuple.hpp:157