42 #include <meta/meta.hpp> 69 template <
typename ...>
typename tuple_t,
73 requires tuple_like_concept<tuple_t<ts...>> && tuple_like_concept<tuple_t<>>
75 constexpr
auto tuple_split(tuple_t<ts...>
const & t, std::index_sequence<Is...>
const & SEQAN3_DOXYGEN_ONLY(idx))
77 return tuple_t<std::tuple_element_t<beg + Is, tuple_t<ts...>>...>{std::get<beg + Is>(t)...};
82 template <
typename ...>
typename tuple_t,
86 requires tuple_like_concept<tuple_t<ts...>> && tuple_like_concept<tuple_t<>>
88 constexpr
auto tuple_split(tuple_t<ts...> && t, std::index_sequence<Is...>
const & SEQAN3_DOXYGEN_ONLY(idx))
90 return tuple_t<std::tuple_element_t<beg + Is, tuple_t<ts...>>...>{std::move(std::get<beg + Is>(t))...};
128 template <
size_t pivot_c,
template <
typename ...>
typename tuple_t,
typename ... ts>
130 requires tuple_like_concept<tuple_t<ts...>>
134 static_assert(pivot_c <=
sizeof...(ts));
136 return tuple_t{detail::tuple_split<0>(t, std::make_index_sequence<pivot_c>{}),
137 detail::tuple_split<pivot_c>(t, std::make_index_sequence<
sizeof...(ts) - pivot_c>{})};
141 template <
size_t pivot_c,
template <
typename ...>
typename tuple_t,
typename ... ts>
147 static_assert(pivot_c <=
sizeof...(ts));
149 return tuple_t{detail::tuple_split<0>(std::move(t), std::make_index_sequence<pivot_c>{}),
150 detail::tuple_split<pivot_c>(std::move(t), std::make_index_sequence<
sizeof...(ts) - pivot_c>{})};
163 template <
typename pivot_t, tuple_like_concept tuple_t>
166 constexpr
size_t pivot_c = meta::find_index<detail::tuple_type_list_t<remove_cvref_t<tuple_t>>, pivot_t>::value;
170 return tuple_split<pivot_c>(std::forward<tuple_t>(t));
193 template <tuple_like_concept tuple_t>
198 return std::get<1>(tuple_split<1>(std::forward<tuple_t>(t)));
constexpr auto tuple_split(tuple_t< ts... > const &t)
Splits a tuple like data structure at the given position.
Definition: tuple_utility.hpp:132
Provides seqan3::type_list and auxiliary metafunctions.
Whether a type behaves like a tuple.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:58
Contains seqan3::pod_tuple.
Provides seqan3::type_list and auxiliary metafunctions.
Provides seqan3::tuple_like_concept.
Definition: aligned_sequence_concept.hpp:288
Provides various metafunctions on generic types.
constexpr auto tuple_pop_front(tuple_t &&t)
Removes the first element of a tuple.
Definition: tuple_utility.hpp:194