1#ifndef KOKKOS_UTILS_IMPL_TYPE_LIST_HPP
2#define KOKKOS_UTILS_IMPL_TYPE_LIST_HPP
4#include "impl/Kokkos_Utilities.hpp"
19template <
typename... T>
37template <
typename T,
typename... Ts>
40 using type = Kokkos::Impl::type_list<T, Ts...>;
43template <
typename... Args>
52template <
typename... Ts>
53struct TypeListSize<
Kokkos::Impl::type_list<Ts...>> : std::integral_constant<size_t, sizeof...(Ts)> {};
61template <
typename,
typename...>
65template <
typename U,
typename T,
typename... Ts>
66struct TypeListContains<U, T, Ts...> :
public std::disjunction<std::is_same<U, T>, std::is_same<U, Ts>...> {};
69template <
typename U,
typename... Ts>
72template <
typename U,
typename... TypeList>
78template <
size_t,
typename>
81template <
size_t I,
typename Head,
typename... Tail>
83 :
TypeListAt<I - 1, Kokkos::Impl::type_list<Tail...>> {};
85template <
class Head,
class... Tail>
91template <
size_t I,
typename T>
97template <
template <
typename>
typename,
typename>
100template <
template <
typename>
typename TransformerType,
typename... Ts>
103 using type = Kokkos::Impl::concat_type_list_t<Kokkos::Impl::type_list<typename TransformerType<Ts>::type...>>;
106template <
template <
typename>
typename TransformerType,
typename T>
115template <
typename... Ts>
118 using type = std::tuple<Ts...>;
127template <
typename,
typename>
130template <
typename T,
typename... Ts>
132 : std::integral_constant<size_t, 0> {};
134template <
typename T,
typename Head,
typename... Ts>
136 : std::integral_constant<size_t, 1 + TypeListIndex<T, Kokkos::Impl::type_list<Ts...>>::value> {};
138template <
typename T,
typename S>
144template <
template <
typename>
typename UnaryPred,
typename...>
148template <
template <
typename>
typename UnaryPred,
typename T,
typename... Ts>
150 :
public std::conjunction<UnaryPred<T>, UnaryPred<Ts>...> {};
153template <
template <
typename>
typename UnaryPred,
typename... Ts>
155 :
public std::conjunction<UnaryPred<Ts>...> {};
157template <
template <
typename>
typename UnaryPred,
typename... TypeList>
168template <
template <
typename>
typename UnaryPred,
typename...>
179template <
template <
typename>
typename UnaryPred,
typename T,
typename... Ts>
181 :
public std::bool_constant<UnaryPred<T>::value || (UnaryPred<Ts>::value || ...)> {};
183template <
template <
typename>
typename UnaryPred,
typename T,
typename... Ts>
185 :
public std::disjunction<UnaryPred<T>, UnaryPred<Ts>...> {};
197template <
template <
typename>
typename UnaryPred,
typename... Ts>
199 :
public std::bool_constant<(UnaryPred<Ts>::value || ...)> {};
201template <
template <
typename>
typename UnaryPred,
typename... Ts>
203 :
public std::disjunction<UnaryPred<Ts>...> {};
207template <
template <
typename>
typename UnaryPred,
typename... TypeList>
212template <
typename TypeList,
typename Callable>
215 [&] <
size_t... Is>(std::index_sequence<Is...>)
constexpr {
217 }(std::make_index_sequence<type_list_size_v<TypeList>>{});
constexpr bool type_list_all_v
constexpr size_t type_list_size_v
constexpr bool type_list_contains_v
constexpr bool type_list_any_v
constexpr void for_each(Callable callable)
Calls the instantiation of the call operator of a callable object for each type in a Kokkos::Impl::ty...
typename TransformTypeList< TransformerType, T >::type transform_type_list_t
typename make_type_list< Args... >::type make_type_list_t
typename TypeListToTuple< T >::type type_list_to_tuple_t
constexpr bool is_type_list_v
constexpr size_t type_list_index_v
typename TypeListAt< I, T >::type type_list_at_t
Kokkos::Impl::type_list< T, Ts... > type