1 #ifndef VIENNACL_TOOLS_MATRIX_SIZE_DEDUCER_HPP_
2 #define VIENNACL_TOOLS_MATRIX_SIZE_DEDUCER_HPP_
46 template <
typename LHS,
typename RHS,
typename OP>
56 template <
typename ScalarType>
57 struct MATRIX_SIZE_DEDUCER<const viennacl::
vector_base<ScalarType>,
70 template <
typename LHS,
typename RHS,
typename OP,
typename ScalarType>
71 struct MATRIX_SIZE_DEDUCER<const viennacl::matrix_expression<const LHS, const RHS, OP>,
83 template <
typename T,
typename F,
typename ScalarType>
84 struct MATRIX_SIZE_DEDUCER<const viennacl::matrix_base<T, F>,
89 ScalarType
const & ) {
return lhs.
size1(); }
92 ScalarType
const & ) {
return lhs.
size2(); }
97 template <
typename LHS,
typename RHS,
typename OP,
typename ScalarType>
98 struct MATRIX_SIZE_DEDUCER<const viennacl::matrix_expression<const LHS, const RHS, OP>,
110 template <
typename T,
typename F,
typename ScalarType>
111 struct MATRIX_SIZE_DEDUCER<const viennacl::matrix_base<T, F>,
116 ScalarType
const & ) {
return lhs.
size1(); }
119 ScalarType
const & ) {
return lhs.
size2(); }
123 template <
typename T>
124 struct MATRIX_SIZE_DEDUCER<const viennacl::vector_base<T>,
129 const int k) {
return lhs.
size() +
static_cast<vcl_size_t>(std::fabs(
double(k))); }
132 const int k) {
return lhs.
size() +
static_cast<vcl_size_t>(std::fabs(
double(k))); }
143 template <
typename MatrixType>
144 struct MATRIX_SIZE_DEDUCER<MatrixType,
149 const MatrixType & ) {
return lhs.size2(); }
151 const MatrixType & ) {
return lhs.size1(); }
155 template <
typename ScalarType,
typename T1,
typename F2>
156 struct MATRIX_SIZE_DEDUCER<const viennacl::matrix_expression<T1,
163 op_trans>
const & lhs,
174 template <
typename ScalarType,
typename F1,
typename T2>
175 struct MATRIX_SIZE_DEDUCER<const viennacl::matrix_base<ScalarType, F1>,
183 op_trans>
const & ) {
return lhs.
size1(); }
187 op_trans>
const & rhs) {
return rhs.lhs().size1(); }
195 template <
typename T1,
typename T2>
196 struct MATRIX_SIZE_DEDUCER<const viennacl::matrix_expression<T1,
206 RHSType
const & ) {
return lhs.lhs().size2(); }
208 RHSType
const & rhs) {
return rhs.lhs().size1(); }
A tag class representing multiplication by a scalar.
Definition: forwards.h:74
size_type size1() const
Returns the number of rows.
Definition: matrix.hpp:625
std::size_t vcl_size_t
Definition: forwards.h:58
size_type size() const
Returns the length of the vector (cf. std::vector)
Definition: vector.hpp:859
Adapter classes for sparse matrices made of the STL type std::vector<std::map<SizeType, SCALARTYPE> >
A tag class representing a matrix given by a vector placed on a certain (off-)diagonal.
Definition: forwards.h:141
A dense matrix class.
Definition: forwards.h:290
Expression template class for representing a tree of expressions which ultimately result in a matrix...
Definition: forwards.h:283
This file provides the forward declarations for the main types used within ViennaCL.
A tag class representing division.
Definition: forwards.h:80
size_type size2() const
Returns the number of columns.
Definition: matrix.hpp:627
Common base class for dense vectors, vector ranges, and vector slices.
Definition: forwards.h:205
A tag class representing matrix-matrix products.
Definition: forwards.h:78
A tag class representing matrix-vector products and element-wise multiplications. ...
Definition: forwards.h:76
RHS & rhs() const
Get right hand side operand.
Definition: matrix.hpp:177
LHS & lhs() const
Get left hand side operand.
Definition: matrix.hpp:174