19 template<std::size_t... Is>
34 template<std::size_t... Is>
37 using type = std::index_sequence<Is...>;
40 template<std::size_t... Is, std::size_t... Js,
class... Sequences>
41 requires (is_index_sequence_v<Sequences> && ...)
42 struct concat_sequences<std::index_sequence<Is...>, std::index_sequence<Js...>, Sequences...>
44 using type = concat_sequences_t<std::index_sequence<Is..., Js...>, Sequences...>;
48namespace sequoia::impl
50 template<
class Sequence, std::
size_t Total,
class Excluded,
template<
class>
class TypeToType,
class... Ts>
53 template<std::size_t... M, std::size_t Total,
class Excluded,
template<
class>
class TypeToType>
54 struct aggregate<std::index_sequence<M...>, Total, Excluded, TypeToType>
56 using type = std::index_sequence<M...>;
59 template<std::size_t... M, std::size_t Total,
class Excluded,
template<
class>
class TypeToType,
class T,
class... Ts>
60 struct aggregate<std::index_sequence<M...>, Total, Excluded, TypeToType, T, Ts...>
63 constexpr static bool cond{std::is_same_v<Excluded, typename TypeToType<T>::type>};
64 using add = std::conditional_t<cond, std::index_sequence<>, std::index_sequence<Total -
sizeof...(Ts) - 1>>;
65 using appended = concat_sequences_t<std::index_sequence<M...>, add>;
68 using type =
typename aggregate<appended, Total, Excluded, TypeToType, Ts...>::type;
76 template<
class Excluded,
template<
class>
class TypeToType,
class... Ts>
82 template<
class Excluded,
template<
class>
class TypeToType,
class... Ts>
83 using make_filtered_sequence =
typename filtered_sequence<Excluded, TypeToType, Ts...>::type;
92 using type = std::index_sequence<>;
95 template<std::size_t I, std::size_t... Is>
98 using type = std::index_sequence<Is..., I>;
115 using type = std::index_sequence<>;
118 template<std::
size_t I>
121 using type = std::index_sequence<I>;
124 template<std::size_t I, std::size_t... Is>
127 using type = concat_sequences_t<reverse_sequence_t<std::index_sequence<Is...>>, std::index_sequence<I>>;
132 template<
class T, std::
size_t N>
135 template<
class T, std::
size_t N>
138 template<std::size_t... Is, std::size_t N>
141 using type = std::index_sequence<N+Is...>;
148 template<
class, std::size_t...>
151 template<
class T, std::size_t... Is>
154 template<std::size_t I, std::size_t... Is>
157 using type = std::index_sequence<I, Is...>;
160 template<std::size_t I, std::size_t... Is, std::size_t Next, std::size_t... Remaining>
163 using type = sequence_partial_sum_t<std::index_sequence<I + Next, I, Is...>, Remaining...>;
173 using type = std::index_sequence<>;
176 template<std::size_t I, std::size_t... Is>
179 using type = reverse_sequence_t<impl::sequence_partial_sum_t<std::index_sequence<I>, Is...>>;
Definition: Sequences.hpp:29
Definition: Sequences.hpp:78
Definition: Sequences.hpp:51
Definition: Sequences.hpp:149
Definition: Sequences.hpp:17
Definition: Sequences.hpp:107
Definition: Sequences.hpp:87
Definition: Sequences.hpp:168
Definition: Sequences.hpp:133