1 #ifndef STAN_MATH_PRIM_META_IS_MATRIX_CL_HPP 2 #define STAN_MATH_PRIM_META_IS_MATRIX_CL_HPP 3 4 #include <stan/math/prim/meta/require_helpers.hpp> 5 #include <type_traits> 6 7 namespace stan { 8 namespace math { 9 10 template <typename T> 11 class arena_matrix_cl; 12 13 /** 14 * Non-templated base class for `matrix_cl` simplifies checking if something is 15 * matrix_cl. 16 */ 17 class matrix_cl_base {}; 18 19 } // namespace math 20 21 /** \ingroup type_traits 22 * Checks if the decayed type of T is a matrix_cl. 23 */ 24 template <typename T> 25 struct is_matrix_cl 26 : public std::is_base_of<math::matrix_cl_base, std::decay_t<T>> {}; 27 28 STAN_ADD_REQUIRE_UNARY(matrix_cl, is_matrix_cl, matrix_cl_group); 29 STAN_ADD_REQUIRE_CONTAINER(matrix_cl, is_matrix_cl, matrix_cl_group); 30 31 namespace internal { 32 33 template <typename T> 34 struct is_arena_matrix_cl_impl : public std::false_type {}; 35 36 template <typename T> 37 struct is_arena_matrix_cl_impl<math::arena_matrix_cl<T>> 38 : public std::true_type {}; 39 40 } // namespace internal 41 42 template <typename T> 43 struct is_arena_matrix_cl 44 : public internal::is_arena_matrix_cl_impl<std::decay_t<T>> {}; 45 46 STAN_ADD_REQUIRE_UNARY(arena_matrix_cl, is_arena_matrix_cl, matrix_cl_group); 47 STAN_ADD_REQUIRE_CONTAINER(arena_matrix_cl, is_arena_matrix_cl, 48 matrix_cl_group); 49 50 } // namespace stan 51 #endif 52