35 #ifndef _BLAZE_MATH_EXPRESSIONS_TDVECSMATMULTEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_TDVECSMATMULTEXPR_H_
89 class TDVecSMatMultExpr :
public DenseVector< TDVecSMatMultExpr<VT,MT>, true >
90 ,
private TVecMatMultExpr
135 enum { vectorizable = 0 };
138 enum { smpAssignable = 0 };
163 if(
vec_.size() != 0UL ) {
165 for(
size_t i=1UL; i<
vec_.size(); ++i ) {
183 return mat_.columns();
213 template<
typename T >
215 return (
vec_.isAliased( alias ) ||
mat_.isAliased( alias ) );
225 template<
typename T >
227 return (
vec_.isAliased( alias ) ||
mat_.isAliased( alias ) );
250 template<
typename VT2 >
258 if( rhs.mat_.rows() == 0UL ) {
271 for(
size_t i=0; i<(~lhs).
size(); ++i ) {
272 (~lhs)[i] = x[0UL] * A(0UL,i);
273 for(
size_t j=1UL; j<x.size(); ++j ) {
274 (~lhs)[i] += x[j] * A(j,i);
293 template<
typename VT2 >
303 if( rhs.mat_.rows() == 0UL ) {
318 for(
size_t i=0UL; i<x.size(); ++i ) {
319 const ConstIterator end( A.end(i) );
320 ConstIterator element( A.begin(i) );
321 for( ; element!=end; ++element ) {
322 (~lhs)[element->index()] += x[i] * element->value();
340 template<
typename VT2 >
368 template<
typename VT2 >
377 if( rhs.mat_.rows() == 0UL ) {
389 for(
size_t i=0UL; i<x.size(); ++i ) {
390 const ConstIterator end( A.end(i) );
391 ConstIterator element( A.begin(i) );
392 for( ; element!=end; ++element ) {
393 (~lhs)[element->index()] += x[i] * element->value();
415 template<
typename VT2 >
424 if( rhs.mat_.rows() == 0UL ) {
436 for(
size_t i=0UL; i<x.size(); ++i ) {
437 const ConstIterator end( A.end(i) );
438 ConstIterator element( A.begin(i) );
439 for( ; element!=end; ++element ) {
440 (~lhs)[element->index()] -= x[i] * element->value();
462 template<
typename VT2 >
533 template<
typename T1
535 inline const typename DisableIf< IsMatMatMultExpr<T2>, TDVecSMatMultExpr<T1,T2> >::Type
540 if( (~vec).size() != (~mat).
rows() )
541 throw std::invalid_argument(
"Vector and matrix sizes do not match" );
569 template<
typename T1
572 inline const typename EnableIf< IsMatMatMultExpr<T2>, MultExprTrait<T1,T2> >::Type::Type
577 return ( vec * (~mat).leftOperand() ) * (~mat).rightOperand();
592 template<
typename VT,
typename MT >
593 struct SubvectorExprTrait< TDVecSMatMultExpr<VT,MT> >
597 typedef typename MultExprTrait< VT, typename SubmatrixExprTrait<const MT>::Type >::Type Type;
MT::ResultType MRT
Result type of the right-hand side sparse matrix expression.
Definition: TDVecSMatMultExpr.h:96
LeftOperand leftOperand() const
Returns the left-hand side dense vector operand.
Definition: TDVecSMatMultExpr.h:192
Compile time check whether the given type is a computational expression template.This type trait clas...
Definition: IsComputation.h:89
void reset(DynamicMatrix< Type, SO > &m)
Resetting the given dense matrix.
Definition: DynamicMatrix.h:4512
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:3703
Expression object for transpose dense vector-sparse matrix multiplications.The TDVecSMatMultExpr clas...
Definition: Forward.h:130
MCT RT
Composite type of the right-hand side sparse matrix expression.
Definition: TDVecSMatMultExpr.h:130
Efficient implementation of a compressed matrix.The CompressedMatrix class template is the represent...
Definition: CompressedMatrix.h:196
SelectType< IsExpression< VT >::value, const VT, const VT & >::Type LeftOperand
Composite type of the left-hand side dense vector expression.
Definition: TDVecSMatMultExpr.h:121
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2375
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:248
Header file for the DenseVector base class.
RightOperand mat_
Right-hand side sparse matrix of the multiplication expression.
Definition: TDVecSMatMultExpr.h:234
Header file for the Computation base class.
ResultType::ElementType ElementType
Resulting element type.
Definition: TDVecSMatMultExpr.h:116
Header file for the RequiresEvaluation type trait.
SelectType< evaluateVector, const VRT, VCT >::Type LT
Composite type of the left-hand side dense vector expression.
Definition: TDVecSMatMultExpr.h:127
const ResultType CompositeType
Data type for composite expression templates.
Definition: TDVecSMatMultExpr.h:118
friend void assign(SparseVector< VT2, true > &lhs, const TDVecSMatMultExpr &rhs)
Assignment of a transpose dense vector-sparse matrix multiplication to a sparse vector ( )...
Definition: TDVecSMatMultExpr.h:341
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:104
Constraint on the data type.
Constraint on the data type.
Header file for the MultExprTrait class template.
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:90
Compile time type selection.The SelectType class template selects one of the two given types T1 and T...
Definition: SelectType.h:59
Header file for the DisableIf class template.
friend void subAssign(DenseVector< VT2, true > &lhs, const TDVecSMatMultExpr &rhs)
Subtraction assignment of a transpose dense vector-sparse matrix multiplication to a dense vector ( )...
Definition: TDVecSMatMultExpr.h:416
Header file for the multiplication trait.
ResultType::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: TDVecSMatMultExpr.h:115
TDVecSMatMultExpr< VT, MT > This
Type of this TDVecSMatMultExpr instance.
Definition: TDVecSMatMultExpr.h:113
friend void multAssign(DenseVector< VT2, true > &lhs, const TDVecSMatMultExpr &rhs)
Multiplication assignment of a transpose dense vector-sparse matrix multiplication to a dense vector ...
Definition: TDVecSMatMultExpr.h:463
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2379
Header file for the IsMatMatMultExpr type trait class.
VT::CompositeType VCT
Composite type of the left-hand side dense vector expression.
Definition: TDVecSMatMultExpr.h:97
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
Constraint on the data type.
TDVecSMatMultExpr(const VT &vec, const MT &mat)
Constructor for the TDVecSMatMultExpr class.
Definition: TDVecSMatMultExpr.h:144
#define BLAZE_CONSTRAINT_MUST_BE_REFERENCE_TYPE(T)
Constraint on the data type.In case the given data type T is not a reference type, a compilation error is created.
Definition: Reference.h:78
Constraints on the storage order of matrix types.
Constraint on the data type.
LeftOperand vec_
Left-hand side dense vector of the multiplication expression.
Definition: TDVecSMatMultExpr.h:233
Header file for the SelectType class template.
Header file for all forward declarations for expression class templates.
VT::ResultType VRT
Result type of the left-hand side dense vector expression.
Definition: TDVecSMatMultExpr.h:95
Header file for the EnableIf class template.
friend DisableIf< IsResizable< typename VT2::ElementType > >::Type assign(DenseVector< VT2, true > &lhs, const TDVecSMatMultExpr &rhs)
Optimized assignment of a transpose dense vector-sparse matrix multiplication to a dense vector ( )...
Definition: TDVecSMatMultExpr.h:295
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: TDVecSMatMultExpr.h:158
const ElementType ReturnType
Return type for expression template evaluations.
Definition: TDVecSMatMultExpr.h:117
Header file for the SubmatrixExprTrait class template.
#define BLAZE_CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a row-major dense or sparse matrix t...
Definition: StorageOrder.h:81
Removal of reference modifiers.The RemoveCV type trait removes any reference modifiers from the given...
Definition: RemoveReference.h:69
Header file for run time assertion macros.
Base template for the MultTrait class.
Definition: MultTrait.h:141
MT::CompositeType MCT
Composite type of the right-hand side sparse matrix expression.
Definition: TDVecSMatMultExpr.h:98
Substitution Failure Is Not An Error (SFINAE) class.The EnableIf class template is an auxiliary tool ...
Definition: EnableIf.h:184
Header file for the reset shim.
Header file for the TVecMatMultExpr base class.
friend void addAssign(DenseVector< VT2, true > &lhs, const TDVecSMatMultExpr &rhs)
Addition assignment of a transpose dense vector-sparse matrix multiplication to a dense vector ( )...
Definition: TDVecSMatMultExpr.h:369
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: TDVecSMatMultExpr.h:214
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: TDVecSMatMultExpr.h:226
MultTrait< VRT, MRT >::Type ResultType
Result type for expression template evaluations.
Definition: TDVecSMatMultExpr.h:114
Header file for the RemoveReference type trait.
Substitution Failure Is Not An Error (SFINAE) class.The DisableIf class template is an auxiliary tool...
Definition: DisableIf.h:184
#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
Header file for the IsComputation type trait class.
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:105
#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
RightOperand rightOperand() const
Returns the right-hand side sparse matrix operand.
Definition: TDVecSMatMultExpr.h:202
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2370
Header file for basic type definitions.
#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: TransposeFlag.h:81
Header file for the SubvectorExprTrait class template.
Header file for the IsResizable type trait.
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type RightOperand
Composite type of the right-hand side sparse matrix expression.
Definition: TDVecSMatMultExpr.h:124
size_t rows(const Matrix< MT, SO > &m)
Returns the current number of rows of the matrix.
Definition: Matrix.h:138
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101
size_t size() const
Returns the current size/dimension of the vector.
Definition: TDVecSMatMultExpr.h:182
#define BLAZE_CONSTRAINT_MUST_BE_SPARSE_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a sparse, N-dimensional matrix type...
Definition: SparseMatrix.h:79
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.
friend EnableIf< IsResizable< typename VT2::ElementType > >::Type assign(DenseVector< VT2, true > &lhs, const TDVecSMatMultExpr &rhs)
Default assignment of a transpose dense vector-sparse matrix multiplication to a dense vector ( )...
Definition: TDVecSMatMultExpr.h:252