12 #ifndef PLSSVM_DETAIL_TYPE_LIST_MANIPULATION_HPP_
13 #define PLSSVM_DETAIL_TYPE_LIST_MANIPULATION_HPP_
18 #include <type_traits>
27 template <
typename T,
typename U>
34 template <
typename S,
typename T>
41 template <
typename... FirstTupleTypes,
typename... SecondTupleTypes>
43 using type = std::tuple<FirstTupleTypes..., SecondTupleTypes...>;
48 template <
typename... T>
52 template <
typename S,
typename T>
60 template <
typename FirstTupleType,
typename... FirstTupleRemainingTypes,
typename... SecondTupleTypes>
61 struct cartesian_type_product<std::tuple<FirstTupleType, FirstTupleRemainingTypes...>, std::tuple<SecondTupleTypes...>> {
63 using FirstTupleType_cross_SecondTupleTypes = std::tuple<real_type_label_type_combination<FirstTupleType, SecondTupleTypes>...>;
66 using FirstTupleRemainingTypes_cross_SecondTupleTypes =
typename cartesian_type_product<std::tuple<FirstTupleRemainingTypes...>, std::tuple<SecondTupleTypes...>>::type;
72 template <
typename... SecondTupleTypes>
74 using type = std::tuple<>;
79 template <
typename... T>
86 using label_type_list = std::tuple<bool, char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, long long, unsigned long long, float, double, long double, std::string>;
97 template <
typename T,
typename Tuple>
105 template <
typename T,
typename... Types>
111 template <
typename T,
typename Tuple>
Namespace containing implementation details. Should not directly be used by users.
Definition: csvm.hpp:27
detail::cartesian_type_product_t< real_type_list, label_type_list > real_type_label_type_combination_list
The cartesian product of all real types and label types as std::tuple.
Definition: type_list.hpp:89
typename cartesian_type_product< T... >::type cartesian_type_product_t
Shorthand for the typename cartesian_type_product<...>::type type.
Definition: type_list.hpp:80
std::tuple< bool, char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, long long, unsigned long long, float, double, long double, std::string > label_type_list
A type list of all supported label types (currently arithmetic types and std::string) as std::tuple.
Definition: type_list.hpp:86
typename concat_tuple_types< T... >::type concat_tuple_types_t
Shorthand for the typename concat_tuple_types<...>::type type.
Definition: type_list.hpp:49
std::tuple< float, double > real_type_list
A type list of all supported real types as std::tuple.
Definition: type_list.hpp:83
constexpr bool type_list_contains_v
Checks whether the type T is present in the Tuple.
Definition: type_list.hpp:112
Definition: type_list.hpp:53
Definition: type_list.hpp:35
Encapsulates a combination of a used real_type (float or double) and label_type (an arithmetic type o...
Definition: type_list.hpp:28
Checks whether the type T is present in the Tuple.
Definition: type_list.hpp:98