16 #include <type_traits>
24 #define SEQAN_NOT_POD "If you are not going to insert a POD type, use std::tuple instead."
27 template <
typename... types>
51 template <
typename type0,
typename... types>
54 static_assert(std::is_standard_layout_v<type0> && std::is_trivial_v<type0>, SEQAN_NOT_POD);
108 template <
typename type0>
111 static_assert(std::is_standard_layout_v<type0> && std::is_trivial_v<type0>, SEQAN_NOT_POD);
125 return _head == rhs._head;
131 return _head != rhs._head;
137 return _head < rhs._head;
143 return _head > rhs._head;
149 return _head <= rhs._head;
155 return _head >= rhs._head;
164 template <
typename... types>
179 if constexpr (i == 0)
191 if constexpr (i == 0)
204 if constexpr (i == 0)
205 return std::move(t._head);
216 if constexpr (i == 0)
217 return std::move(t._head);
233 template <
typename type,
typename... arg_types>
235 requires (seqan3::pack_traits::count<type, arg_types...> == 1)
242 template <
typename type,
typename... arg_types>
244 requires (seqan3::pack_traits::count<type, arg_types...> == 1)
251 template <
typename type,
typename... arg_types>
253 requires (seqan3::pack_traits::count<type, arg_types...> == 1)
260 template <
typename type,
typename... arg_types>
262 requires (seqan3::pack_traits::count<type, arg_types...> == 1)
276 requires (i <
sizeof...(types))
278 return seqan3::get<i>(t);
283 requires (i <
sizeof...(types))
285 return seqan3::get<i>(t);
290 requires (i <
sizeof...(types))
292 return seqan3::get<i>(std::move(t));
297 requires (i <
sizeof...(types))
299 return seqan3::get<i>(std::move(t));
302 template <
typename type,
typename... types>
304 requires (seqan3::pack_traits::count<type, types...> == 1)
306 return seqan3::get<type>(t);
309 template <
typename type,
typename... types>
311 requires (seqan3::pack_traits::count<type, types...> == 1)
313 return seqan3::get<type>(t);
316 template <
typename type,
typename... types>
318 requires (seqan3::pack_traits::count<type, types...> == 1)
320 return seqan3::get<type>(std::move(t));
323 template <
typename type,
typename... types>
325 requires (seqan3::pack_traits::count<type, types...> == 1)
327 return seqan3::get<type>(std::move(t));
336 template <
std::size_t i,
template <
typename...>
typename t,
typename... types>
338 struct tuple_element<i, t<types...>>
341 using type = seqan3::pack_traits::at<i, types...>;
349 template <
template <
typename...>
typename t,
typename... types>
requires requires
The rank_type of the semi-alphabet; defined as the return type of seqan3::to_rank....
Definition: alphabet/concept.hpp:164
constexpr ptrdiff_t find
Get the index of the first occurrence of a type in a pack.
Definition: type_pack/traits.hpp:182
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
constexpr auto const & get(configuration< configs_t... > const &config) noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: configuration.hpp:415
SeqAn specific customisations in the standard namespace.
constexpr bool operator>=(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than or equal to rhs.
Definition: pod_tuple.hpp:97
constexpr bool operator!=(pod_tuple const &rhs) const noexcept
Checks whether *this is not equal to rhs.
Definition: pod_tuple.hpp:73
constexpr bool operator<=(pod_tuple const &rhs) const noexcept
Checks whether *this is less than or equal to rhs.
Definition: pod_tuple.hpp:91
constexpr bool operator==(pod_tuple const &rhs) const noexcept
Checks whether *this is equal to rhs.
Definition: pod_tuple.hpp:67
constexpr bool operator<(pod_tuple const &rhs) const noexcept
Checks whether *this is less than rhs.
Definition: pod_tuple.hpp:79
constexpr bool operator>(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than rhs.
Definition: pod_tuple.hpp:85
constexpr bool operator<=(pod_tuple const &rhs) const noexcept
Checks whether *this is less than or equal to rhs.
Definition: pod_tuple.hpp:147
constexpr bool operator>(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than rhs.
Definition: pod_tuple.hpp:141
constexpr bool operator>=(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than or equal to rhs.
Definition: pod_tuple.hpp:153
constexpr bool operator!=(pod_tuple const &rhs) const noexcept
Checks whether *this is not equal to rhs.
Definition: pod_tuple.hpp:129
constexpr bool operator==(pod_tuple const &rhs) const noexcept
Checks whether *this is equal to rhs.
Definition: pod_tuple.hpp:123
constexpr bool operator<(pod_tuple const &rhs) const noexcept
Checks whether *this is less than rhs.
Definition: pod_tuple.hpp:135
Definition: pod_tuple.hpp:29
constexpr auto const && get(seqan3::pod_tuple< types... > const &&t) noexcept requires(i< sizeof...(types))
The same as std::get on a std::tuple.
Definition: pod_tuple.hpp:213
constexpr auto const & get(seqan3::pod_tuple< types... > const &t) noexcept requires(i< sizeof...(types))
The same as std::get on a std::tuple.
Definition: pod_tuple.hpp:188
constexpr auto const & get(seqan3::pod_tuple< arg_types... > const &t) noexcept requires(seqan3
The same as std::get on a std::tuple.
Definition: pod_tuple.hpp:243
constexpr auto const && get(seqan3::pod_tuple< arg_types... > const &&t) noexcept requires(seqan3
The same as std::get on a std::tuple.
Definition: pod_tuple.hpp:261
constexpr auto & get(seqan3::pod_tuple< types... > &t) noexcept requires(i< sizeof...(types))
The same as std::get on a std::tuple.
Definition: pod_tuple.hpp:176
constexpr auto && get(seqan3::pod_tuple< types... > &&t) noexcept requires(i< sizeof...(types))
The same as std::get on a std::tuple.
Definition: pod_tuple.hpp:201
constexpr auto & get(seqan3::pod_tuple< arg_types... > &t) noexcept requires(seqan3
The same as std::get on a std::tuple.
Definition: pod_tuple.hpp:234
pod_tuple(types &&...) -> pod_tuple< types... >
User defined deduction guide enables easy use.
constexpr auto && get(seqan3::pod_tuple< arg_types... > &&t) noexcept requires(seqan3
The same as std::get on a std::tuple.
Definition: pod_tuple.hpp:252
Provides various traits for template packs.