17 #include <common/visibility_control.hpp> 21 #include <type_traits> 23 #ifndef COMMON__TYPE_TRAITS_HPP_ 24 #define COMMON__TYPE_TRAITS_HPP_ 33 template<
class QueryT,
class TupleT>
36 static_assert(!std::is_same<TupleT, std::tuple<>>::value,
"Could not find QueryT in given tuple");
40 template<
class HeadT,
class ... Tail>
41 struct COMMON_PUBLIC
index<HeadT, std::tuple<HeadT, Tail...>>
42 : std::integral_constant<std::int32_t, 0> {};
45 template<
class QueryT,
class HeadT,
class ... Tail>
46 struct COMMON_PUBLIC
index<QueryT, std::tuple<HeadT, Tail...>>
47 : std::integral_constant<std::int32_t, 1 + index<QueryT, std::tuple<Tail...>>::value> {};
60 template<std::size_t
I = 0UL,
typename Callable,
typename ... TypesT>
61 COMMON_PUBLIC
inline typename std::enable_if_t<I ==
sizeof...(TypesT)>
62 visit(std::tuple<TypesT...> &, Callable) {}
64 template<std::size_t I = 0UL,
typename Callable,
typename ... TypesT>
65 COMMON_PUBLIC
inline typename std::enable_if_t<I ==
sizeof...(TypesT)>
66 visit(
const std::tuple<TypesT...> &, Callable) {}
83 template<std::size_t I = 0UL,
typename Callable,
typename ... TypesT>
84 COMMON_PUBLIC
inline typename std::enable_if_t<I !=
sizeof...(TypesT)>
85 visit(std::tuple<TypesT...> & tuple, Callable callable)
87 callable(std::get<I>(tuple));
88 visit<I + 1UL, Callable, TypesT...>(tuple, callable);
91 template<std::size_t I = 0UL,
typename Callable,
typename ... TypesT>
92 COMMON_PUBLIC
inline typename std::enable_if_t<I !=
sizeof...(TypesT)>
93 visit(
const std::tuple<TypesT...> & tuple, Callable callable)
95 callable(std::get<I>(tuple));
96 visit<I + 1UL, Callable, TypesT...>(tuple, callable);
103 template<
class TraitT>
105 template<
class TraitT,
class ... TraitsTs>
107 : std::conditional_t<static_cast<bool>(TraitT::value), conjunction<TraitsTs...>, TraitT> {};
113 #endif // COMMON__TYPE_TRAITS_HPP_ A class to compute a conjunction over given traits.
Definition: type_traits.hpp:101
Find an index of a type in a tuple.
Definition: type_traits.hpp:34
OnlineData I
Definition: linear_tire.snippet.hpp:36
A conjunction of another type shall derive from that type.
Definition: type_traits.hpp:104
COMMON_PUBLIC std::enable_if_t< I==sizeof...(TypesT)> visit(std::tuple< TypesT... > &, Callable)
Visit every element in a tuple.
Definition: type_traits.hpp:62
This file defines the lanelet2_map_provider_node class.
Definition: quick_sort.hpp:24