TSVecDVecMultExpr.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_EXPRESSIONS_TSVECDVECMULTEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_TSVECDVECMULTEXPR_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
50 #include <blaze/util/Exception.h>
52 #include <blaze/util/Types.h>
54 
55 
56 namespace blaze {
57 
58 //=================================================================================================
59 //
60 // GLOBAL BINARY ARITHMETIC OPERATORS
61 //
62 //=================================================================================================
63 
64 //*************************************************************************************************
95 template< typename T1 // Type of the left-hand side sparse vector
96  , typename T2 > // Type of the right-hand side dense vector
97 inline const typename MultTrait<typename T1::ElementType,typename T2::ElementType>::Type
99 {
101 
102  typedef typename T1::CompositeType Lhs; // Composite type of the left-hand side sparse vector expression
103  typedef typename T2::CompositeType Rhs; // Composite type of the right-hand side dense vector expression
104  typedef typename RemoveReference<Lhs>::Type X1; // Auxiliary type for the left-hand side composite type
105  typedef typename RemoveReference<Rhs>::Type X2; // Auxiliary type for the right-hand side composite type
106  typedef typename X1::ElementType ET1; // Element type of the left-hand side sparse vector expression
107  typedef typename X2::ElementType ET2; // Element type of the right-hand side dense vector expression
108  typedef typename MultTrait<ET1,ET2>::Type MultType; // Multiplication result type
109  typedef typename X1::ConstIterator ConstIterator; // Iterator type of the left-hand sparse vector expression
110 
115 
116  if( (~lhs).size() != (~rhs).size() ) {
117  BLAZE_THROW_INVALID_ARGUMENT( "Vector sizes do not match" );
118  }
119 
120  if( (~lhs).nonZeros() == 0UL ) return MultType();
121 
122  Lhs left ( ~lhs );
123  Rhs right( ~rhs );
124 
125  ConstIterator element( left.begin() );
126  MultType sp( element->value() * right[ element->index() ] );
127  ++element;
128 
129  for( ; element!=left.end(); ++element )
130  sp += element->value() * right[ element->index() ];
131 
132  return sp;
133 }
134 //*************************************************************************************************
135 
136 } // namespace blaze
137 
138 #endif
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exceptionThis macro encapsulates the default way of...
Definition: Exception.h:187
const DMatDMatMultExpr< T1, T2 > operator*(const DenseMatrix< T1, false > &lhs, const DenseMatrix< T2, false > &rhs)
Multiplication operator for the multiplication of two row-major dense matrices ( ).
Definition: DMatDMatMultExpr.h:7820
Header file for basic type definitions.
Header file for the SparseVector base class.
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector)
Returns the current size/dimension of the vector.
Definition: Vector.h:252
#define BLAZE_CONSTRAINT_MUST_BE_COLUMN_VECTOR_TYPE(T)
Constraint on the data type.In case the given data type T is not a column dense or sparse vector type...
Definition: ColumnVector.h:79
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2588
Header file for the DenseVector base class.
BLAZE_ALWAYS_INLINE size_t nonZeros(const Matrix< MT, SO > &matrix)
Returns the total number of non-zero elements in the matrix.
Definition: Matrix.h:378
Constraint on the transpose flag of vector types.
Header file for the multiplication trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2592
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
#define BLAZE_CONSTRAINT_MUST_BE_SPARSE_VECTOR_TYPE(T)
Constraint on the data type.In case the given data type T is not a sparse, N-dimensional vector type...
Definition: SparseVector.h:79
Constraint on the data type.
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
Constraint on the data type.
Removal of reference modifiers.The RemoveCV type trait removes any reference modifiers from the given...
Definition: RemoveReference.h:69
Base template for the MultTrait class.
Definition: MultTrait.h:138
Header file for the RemoveReference type trait.
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_VECTOR_TYPE(T)
Constraint on the data type.In case the given data type T is not a dense, N-dimensional vector type...
Definition: DenseVector.h:79
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:118
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:157
#define BLAZE_CONSTRAINT_MUST_BE_ROW_VECTOR_TYPE(T)
Constraint on the data type.In case the given data type T is not a row dense or sparse vector type (i...
Definition: RowVector.h:79
Header file for exception macros.
Constraint on the transpose flag of vector types.
Header file for the FunctionTrace class.