5 #ifndef GKO_PUBLIC_CORE_BASE_TYPE_TRAITS_HPP_
6 #define GKO_PUBLIC_CORE_BASE_TYPE_TRAITS_HPP_
10 #include <ginkgo/core/base/lin_op.hpp>
16 template <
typename Type>
17 constexpr
bool is_ginkgo_linop = std::is_base_of_v<LinOp, Type>;
21 template <
typename Type>
22 struct factory_type_impl {
23 using type =
typename Type::Factory;
28 struct factory_type_impl<LinOp> {
29 using type = LinOpFactory;
33 template <
typename Type>
34 using factory_type =
typename factory_type_impl<Type>::type;
38 template <
typename Type,
typename =
void>
39 struct transposed_type_impl {
40 using type =
typename Type::transposed_type;
45 struct transposed_type_impl<LinOp, void> {
51 template <
typename Type>
52 struct transposed_type_impl<Type, std::enable_if_t<!is_ginkgo_linop<Type>>> {
57 template <
typename Type>
58 using transposed_type =
typename transposed_type_impl<Type>::type;
62 template <
typename Type,
typename =
void>
63 struct get_value_type_impl {
64 using type =
typename Type::value_type;
69 template <
typename Type>
70 struct get_value_type_impl<Type, std::enable_if_t<!is_ginkgo_linop<Type>>> {
75 template <
typename Type>
76 using get_value_type =
typename get_value_type_impl<Type>::type;
82 #endif // GKO_PUBLIC_CORE_BASE_TYPE_TRAITS_HPP_