31#ifndef FENNEC_LANG_TYPE_SEQUENCES_H
32#define FENNEC_LANG_TYPE_SEQUENCES_H
63#include <fennec/lang/detail/_type_sequences.h>
69template<
typename...TypesT>
struct type_sequence {};
77template<
typename...TypesT>
struct first_element : detail::_first_element<TypesT...> {};
91template<
size_t n,
typename...TypesT>
struct nth_element : detail::_nth_element<n, 0, TypesT...> {};
93template<
size_t n,
typename...TypesT>
using nth_element_t =
nth_element<n, TypesT...>::type;
105 template<
typename,
typename...>
class ClassT
106,
typename SubT,
typename OriginT
109 {
using type = ClassT<SubT, RestT...>; };
133template<
typename T,
typename...Ts>
struct find_element : detail::_find_element<0, T, Ts...> {};
150template<
template<
typename>
typename SearchT,
typename...TypesT>
struct search_element : detail::_search_element<SearchT, TypesT...> {};
159template<
template<
typename,
typename...>
typename,
typename,
typename...>
struct search_element_args;
161template<
template<
typename,
typename...>
typename SearchT,
typename...TypesT,
typename...ArgsT>
162struct search_element_args<SearchT, type_sequence<ArgsT...>, TypesT...>
163 : detail::_search_element_args<SearchT, detail::_type_sequence<ArgsT...>, TypesT...> {
196template<
typename T,
typename...Ts>
requires(not is_same_v<T, Ts> && ...)
197struct is_unique<T, Ts...> : is_unique<Ts...> {};
metaprogramming boolean constant
Definition constants.h:95
Checks if the type sequence Ts... contains T
Definition type_sequences.h:175
metaprogramming false constant
Definition constants.h:107
Finds the index of T in Ts, if T is not found, results in sizeof...(Ts)
Definition type_sequences.h:133
Get the first element of a template parameter pack.
Definition type_sequences.h:77
Checks if all types in a type sequence are unique.
Definition type_sequences.h:190
Gets the max value of the size of each type in the sequence, i.e. max(sizeof(Ts).....
Definition type_sequences.h:118
Gets the type of the nth element of the type sequence TypesT...
Definition type_sequences.h:91
Take a Template with a Pack ClassT<ArgsT...> and replace the first ArgT of ArgsT.....
Definition type_sequences.h:101
Find the first element in TypesT... that satisfies SearchT<T>
Definition type_sequences.h:150
metaprogramming true constant
Definition constants.h:101
constexpr bool contains_element_v
Shorthand for contains_element_v<T, Ts...>::value
Definition type_sequences.h:181
constexpr size_t max_element_size_v
Shorthand for max_element_size<Ts...>::value
Definition type_sequences.h:123
constexpr bool is_unique_v
Shorthand for is_unique<Ts...>::value
Definition type_sequences.h:202
typename first_element< TypesT... >::type first_element_t
alias for first_element<TypesT>::type
Definition type_sequences.h:81
constexpr size_t find_element_v
Shorthand for find_element<T, Ts...>::value
Definition type_sequences.h:139
search_element< SearchT, TypesT... >::type search_element_t
Shorthand for search_element_t<T, Ts...>::type
Definition type_sequences.h:156