1 #ifndef VIENNACL_META_RESULT_OF_HPP_
2 #define VIENNACL_META_RESULT_OF_HPP_
30 #ifdef VIENNACL_HAVE_UBLAS
31 #include <boost/numeric/ublas/matrix_sparse.hpp>
32 #include <boost/numeric/ublas/matrix.hpp>
35 #ifdef VIENNACL_HAVE_EIGEN
37 #include <Eigen/Sparse>
40 #ifdef VIENNACL_HAVE_MTL4
41 #include <boost/numeric/mtl/mtl.hpp>
57 typedef typename T::size_type
type;
60 #ifdef VIENNACL_HAVE_EIGEN
61 template <
class T,
int a,
int b,
int c,
int d,
int e>
62 struct size_type< Eigen::Matrix<T, a, b, c, d, e> >
64 typedef std::size_t
type;
68 struct size_type<Eigen::VectorXf>
70 typedef std::size_t
type;
74 struct size_type<Eigen::VectorXd>
76 typedef std::size_t
type;
79 template <
typename T,
int options>
80 struct size_type<Eigen::SparseMatrix<T, options> >
82 typedef std::size_t
type;
92 typedef typename T::value_type
type;
101 typedef typename T::ERROR_CANNOT_DEDUCE_CPU_SCALAR_TYPE_FOR_T
type;
116 template <
typename T>
122 template <
typename T,
unsigned int ALIGNMENT>
128 template <
typename T>
134 template <
typename T1,
typename T2,
typename OP>
142 template <
typename T,
typename F,
unsigned int ALIGNMENT>
148 template <
typename T>
154 template <
typename T1,
typename T2,
typename OP>
161 #ifdef VIENNACL_HAVE_EIGEN
165 typedef Eigen::MatrixXf::RealScalar
type;
169 struct value_type<Eigen::MatrixXd>
171 typedef Eigen::MatrixXd::RealScalar
type;
174 template <
typename ScalarType,
int option>
175 struct value_type<Eigen::SparseMatrix<ScalarType, option> >
177 typedef ScalarType
type;
181 struct value_type<Eigen::VectorXf>
183 typedef Eigen::VectorXf::RealScalar
type;
187 struct value_type<Eigen::VectorXd>
189 typedef Eigen::VectorXd::RealScalar
type;
196 template <
typename T>