20 namespace seqan3::detail
37 template <
typename ...>
typename tuple_t,
43 constexpr
auto tuple_split(tuple_t<ts...>
const & t, std::index_sequence<Is...>
const & SEQAN3_DOXYGEN_ONLY(idx))
45 return tuple_t<std::tuple_element_t<beg + Is, tuple_t<ts...>>...>{std::get<beg + Is>(t)...};
50 template <
typename ...>
typename tuple_t,
56 constexpr
auto tuple_split(tuple_t<ts...> && t, std::index_sequence<Is...>
const & SEQAN3_DOXYGEN_ONLY(idx))
58 return tuple_t<std::tuple_element_t<beg + Is, tuple_t<ts...>>...>{std::move(std::get<beg + Is>(t))...};
92 template <
size_t pivot_c,
template <
typename ...>
typename tuple_t,
typename ...ts>
98 static_assert(pivot_c <=
sizeof...(ts));
100 return tuple_t{detail::tuple_split<0>(t, std::make_index_sequence<pivot_c>{}),
101 detail::tuple_split<pivot_c>(t, std::make_index_sequence<
sizeof...(ts) - pivot_c>{})};
105 template <
size_t pivot_c,
template <
typename ...>
typename tuple_t,
typename ...ts>
111 static_assert(pivot_c <=
sizeof...(ts));
113 return tuple_t{detail::tuple_split<0>(std::move(t), std::make_index_sequence<pivot_c>{}),
114 detail::tuple_split<pivot_c>(std::move(t), std::make_index_sequence<
sizeof...(ts) - pivot_c>{})};
143 template <
typename pivot_t, tuple_like tuple_t>
146 constexpr
size_t pivot_c = list_traits::find<pivot_t, detail::tuple_type_list_t<std::remove_cvref_t<tuple_t>>>;
150 return tuple_split<pivot_c>(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: split.hpp:96
Whether a type behaves like a tuple.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
typename remove_cvref< t >::type remove_cvref_t
Return the input type with const, volatile and references removed (transformation_trait shortcut).
Definition: type_traits:54
Provides traits for seqan3::type_list.
Provides seqan3::tuple_like.