kokkos-utils 0.0.1
 
All Classes Namespaces Files Functions Variables Typedefs Macros Modules Pages Concepts
Loading...
Searching...
No Matches
type_list.hpp
Go to the documentation of this file.
1#ifndef KOKKOS_UTILS_IMPL_TYPE_LIST_HPP
2#define KOKKOS_UTILS_IMPL_TYPE_LIST_HPP
3
4#include "impl/Kokkos_Utilities.hpp"
5
11
13{
14
17template <typename>
19
20template <typename... Ts>
21struct TypeListSize<Kokkos::Impl::type_list<Ts...>> : std::integral_constant<size_t, sizeof...(Ts)> {};
22
23template <typename T>
24inline constexpr size_t type_list_size_v = TypeListSize<T>::value;
26
29template <typename, typename>
31
32template <typename T, typename... Ts>
33struct TypeListContains<T, Kokkos::Impl::type_list<Ts...>> : std::disjunction<std::is_same<T, Ts>...> {};
34
35template <typename T, typename S>
38
41template <size_t, typename>
43
44template <size_t I, typename Head, typename... Tail>
45struct TypeListAt<I, Kokkos::Impl::type_list<Head, Tail...>>
46 : TypeListAt<I - 1, Kokkos::Impl::type_list<Tail...>> {};
47
48template <class Head, class... Tail>
49struct TypeListAt<0, Kokkos::Impl::type_list<Head, Tail...>>
50{
51 using type = Head;
52};
53
54template <size_t I, typename T>
57
60template <template <typename> typename, typename>
62
63template <template <typename> typename TransformerType, typename... Ts>
64struct TransformTypeList<TransformerType, Kokkos::Impl::type_list<Ts...>>
65{
66 using type = Kokkos::Impl::concat_type_list_t<Kokkos::Impl::type_list<typename TransformerType<Ts>::type...>>;
67};
68
69template <template <typename> typename TransformerType, typename T>
72
75template <typename>
77
78template <typename... Ts>
79struct TypeListToTuple<Kokkos::Impl::type_list<Ts...>>
80{
81 using type = std::tuple<Ts...>;
82};
83
84template <typename T>
87
90template <typename, typename>
92
93template <typename T, typename... Ts>
94struct TypeListIndex<T, Kokkos::Impl::type_list<T, Ts...>>
95 : std::integral_constant<size_t, 0> {};
96
97template <typename T, typename Head, typename... Ts>
98struct TypeListIndex<T, Kokkos::Impl::type_list<Head, Ts...>>
99 : std::integral_constant<size_t, 1 + TypeListIndex<T, Kokkos::Impl::type_list<Ts...>>::value> {};
100
101template <typename T, typename S>
104
106template <typename TypeList, typename Callable>
107constexpr void for_each(Callable callable)
108{
109 [&] <size_t... Is>(std::index_sequence<Is...>) constexpr {
110 (callable.template operator()<type_list_at_t<Is, TypeList>>(), ...);
111 }(std::make_index_sequence<type_list_size_v<TypeList>>{});
112}
113
114} // namespace Kokkos::utils::impl
115
116#endif // KOKKOS_UTILS_IMPL_TYPE_LIST_HPP
constexpr size_t type_list_size_v
Definition type_list.hpp:24
constexpr bool type_list_contains_v
Definition type_list.hpp:36
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
Definition type_list.hpp:70
typename TypeListToTuple< T >::type type_list_to_tuple_t
Definition type_list.hpp:85
constexpr size_t type_list_index_v
typename TypeListAt< I, T >::type type_list_at_t
Definition type_list.hpp:55
Kokkos::Impl::concat_type_list_t< Kokkos::Impl::type_list< typename TransformerType< Ts >::type... > > type
Definition type_list.hpp:66