1#ifndef KOKKOS_UTILS_IMPL_TYPE_LIST_HPP
2#define KOKKOS_UTILS_IMPL_TYPE_LIST_HPP
4#include "impl/Kokkos_Utilities.hpp"
20template <
typename... Ts>
21struct TypeListSize<
Kokkos::Impl::type_list<Ts...>> : std::integral_constant<size_t, sizeof...(Ts)> {};
29template <
typename,
typename>
32template <
typename T,
typename... Ts>
35template <
typename T,
typename S>
41template <
size_t,
typename>
44template <
size_t I,
typename Head,
typename... Tail>
46 :
TypeListAt<I - 1, Kokkos::Impl::type_list<Tail...>> {};
48template <
class Head,
class... Tail>
54template <
size_t I,
typename T>
60template <
template <
typename>
typename,
typename>
63template <
template <
typename>
typename TransformerType,
typename... Ts>
66 using type = Kokkos::Impl::concat_type_list_t<Kokkos::Impl::type_list<typename TransformerType<Ts>::type...>>;
69template <
template <
typename>
typename TransformerType,
typename T>
78template <
typename... Ts>
81 using type = std::tuple<Ts...>;
90template <
typename,
typename>
93template <
typename T,
typename... Ts>
95 : std::integral_constant<size_t, 0> {};
97template <
typename T,
typename Head,
typename... Ts>
99 : std::integral_constant<size_t, 1 + TypeListIndex<T, Kokkos::Impl::type_list<Ts...>>::value> {};
101template <
typename T,
typename S>
106template <
typename TypeList,
typename Callable>
109 [&] <
size_t... Is>(std::index_sequence<Is...>)
constexpr {
111 }(std::make_index_sequence<type_list_size_v<TypeList>>{});
constexpr size_t type_list_size_v
constexpr bool type_list_contains_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 TypeListToTuple< T >::type type_list_to_tuple_t
constexpr size_t type_list_index_v
typename TypeListAt< I, T >::type type_list_at_t