35 #ifndef _BLAZE_MATH_EXPRESSIONS_TDVECTSMATMULTEXPR_H_ 36 #define _BLAZE_MATH_EXPRESSIONS_TDVECTSMATMULTEXPR_H_ 94 class TDVecTSMatMultExpr
95 :
public TVecMatMultExpr< DenseVector< TDVecTSMatMultExpr<VT,MT>, true > >
108 static constexpr
bool evaluateVector = ( IsComputation_v<VT> || RequiresEvaluation_v<VT> );
129 template<
typename VT2 >
131 static constexpr
bool UseAssign_v =
useAssign;
141 template<
typename T1 >
142 static constexpr
bool UseSMPAssign_v =
useAssign;
211 if( index >=
mat_.columns() ) {
214 return (*
this)[index];
223 inline size_t size() const noexcept {
224 return mat_.columns();
254 template<
typename T >
255 inline bool canAlias(
const T* alias )
const noexcept {
256 return (
vec_.isAliased( alias ) ||
mat_.isAliased( alias ) );
266 template<
typename T >
267 inline bool isAliased(
const T* alias )
const noexcept {
268 return (
vec_.isAliased( alias ) ||
mat_.isAliased( alias ) );
278 return vec_.isAligned();
288 return (
size() > SMP_TDVECTSMATMULT_THRESHOLD );
313 template<
typename VT2 >
321 if( rhs.mat_.rows() == 0UL ) {
353 template<
typename VT2 >
385 template<
typename VT2 >
393 if( rhs.mat_.rows() == 0UL ) {
428 template<
typename VT2 >
436 if( rhs.mat_.rows() == 0UL ) {
471 template<
typename VT2 >
507 template<
typename VT2 >
542 template<
typename VT2 >
550 if( rhs.mat_.rows() == 0UL ) {
581 template<
typename VT2 >
612 template<
typename VT2 >
620 if( rhs.mat_.rows() == 0UL ) {
654 template<
typename VT2 >
662 if( rhs.mat_.rows() == 0UL ) {
696 template<
typename VT2 >
731 template<
typename VT2 >
787 template<
typename VT
790 IsSame_v< ElementType_t<VT>, ElementType_t<MT> > ) ||
791 IsZero_v<MT> >* =
nullptr >
792 inline const TDVecTSMatMultExpr<VT,MT>
793 tdvectsmatmult(
const DenseVector<VT,true>& vec,
const SparseMatrix<MT,true>& mat )
799 return TDVecTSMatMultExpr<VT,MT>( ~vec, ~mat );
819 template<
typename VT
821 , EnableIf_t< IsIdentity_v<MT> &&
822 IsSame_v< ElementType_t<VT>, ElementType_t<MT> > >* =
nullptr >
824 tdvectsmatmult(
const DenseVector<VT,true>& vec,
const SparseMatrix<MT,true>& mat )
851 template<
typename VT
853 , EnableIf_t< IsZero_v<MT> >* =
nullptr >
854 inline decltype(
auto)
855 tdvectsmatmult( const DenseVector<VT,true>& vec, const SparseMatrix<MT,true>& mat )
863 using ReturnType =
const MultTrait_t< ResultType_t<VT>, ResultType_t<MT> >;
868 return ReturnType( (~mat).
columns() );
905 template<
typename VT
907 inline decltype(
auto)
914 if( (~vec).
size() != (~mat).
rows() ) {
918 return tdvectsmatmult( ~vec, ~mat );
933 template<
typename VT,
typename MT >
934 struct IsAligned< TDVecTSMatMultExpr<VT,MT> >
935 :
public IsAligned<VT>
friend auto smpMultAssign(DenseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseSMPAssign_v< VT2 > >
SMP multiplication assignment of a transpose dense vector-transpose sparse matrix multiplication to a...
Definition: TDVecTSMatMultExpr.h:697
MultTrait_t< VRT, MRT > ResultType
Result type for expression template evaluations.
Definition: TDVecTSMatMultExpr.h:150
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exception.This macro encapsulates the default way o...
Definition: Exception.h:235
static constexpr bool simdEnabled
Compilation switch for the expression template evaluation strategy.
Definition: TDVecTSMatMultExpr.h:173
TransposeType_t< ResultType > TransposeType
Transpose type for expression template evaluations.
Definition: TDVecTSMatMultExpr.h:151
RightOperand rightOperand() const noexcept
Returns the right-hand side transpose sparse matrix operand.
Definition: TDVecTSMatMultExpr.h:243
Header file for auxiliary alias declarations.
decltype(auto) column(Matrix< MT, SO > &matrix, RCAs... args)
Creating a view on a specific column of the given matrix.
Definition: Column.h:133
Header file for the blaze::checked and blaze::unchecked instances.
static constexpr bool smpAssignable
Compilation switch for the expression template assignment strategy.
Definition: TDVecTSMatMultExpr.h:176
Header file for basic type definitions.
LeftOperand leftOperand() const noexcept
Returns the left-hand side dense vector operand.
Definition: TDVecTSMatMultExpr.h:233
size_t size() const noexcept
Returns the current size/dimension of the vector.
Definition: TDVecTSMatMultExpr.h:223
typename If< Condition, T1, T2 >::Type If_t
Auxiliary alias template for the If class template.The If_t alias template provides a convenient shor...
Definition: If.h:109
typename T::ResultType ResultType_t
Alias declaration for nested ResultType type definitions.The ResultType_t alias declaration provides ...
Definition: Aliases.h:390
Header file for the serial shim.
friend auto smpAssign(DenseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseSMPAssign_v< VT2 > >
SMP assignment of a transpose dense vector-transpose sparse matrix multiplication to a dense vector (...
Definition: TDVecTSMatMultExpr.h:543
Expression object for transpose dense vector-transpose sparse matrix multiplications....
Definition: Forward.h:178
friend auto smpDivAssign(DenseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseSMPAssign_v< VT2 > >
SMP division assignment of a transpose dense vector-transpose sparse matrix multiplication to a dense...
Definition: TDVecTSMatMultExpr.h:732
ResultType_t< VT > VRT
Result type of the left-hand side dense vector expression.
Definition: TDVecTSMatMultExpr.h:100
TDVecTSMatMultExpr(const VT &vec, const MT &mat) noexcept
Constructor for the TDVecTSMatMultExpr class.
Definition: TDVecTSMatMultExpr.h:183
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:595
RightOperand mat_
Right-hand side sparse matrix of the multiplication expression.
Definition: TDVecTSMatMultExpr.h:295
friend auto smpSubAssign(DenseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseSMPAssign_v< VT2 > >
SMP subtraction assignment of a transpose dense vector-transpose sparse matrix multiplication to a de...
Definition: TDVecTSMatMultExpr.h:655
constexpr Unchecked unchecked
Global Unchecked instance.The blaze::unchecked instance is an optional token for the creation of view...
Definition: Check.h:138
Constraint on the data type.
Header file for the DenseVector base class.
Header file for the MAYBE_UNUSED function template.
Header file for the IsIdentity type trait.
Header file for the Computation base class.
Header file for the reset shim.
ReturnType at(size_t index) const
Checked access to the vector elements.
Definition: TDVecTSMatMultExpr.h:210
Header file for the RequiresEvaluation type trait.
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: TDVecTSMatMultExpr.h:267
If_t< IsExpression_v< MT >, const MT, const MT & > RightOperand
Composite type of the right-hand side sparse matrix expression.
Definition: TDVecTSMatMultExpr.h:162
constexpr size_t columns(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of columns of the matrix.
Definition: Matrix.h:514
CompositeType_t< VT > VCT
Composite type of the left-hand side dense vector expression.
Definition: TDVecTSMatMultExpr.h:102
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes....
Definition: Forward.h:145
typename T::ElementType ElementType_t
Alias declaration for nested ElementType type definitions.The ElementType_t alias declaration provide...
Definition: Aliases.h:170
If_t< evaluateMatrix, const MRT, MCT > RT
Composite type of the right-hand side sparse matrix expression.
Definition: TDVecTSMatMultExpr.h:168
Constraint on the data type.
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.The EnableIf_t alias declaration provides a convenient...
Definition: EnableIf.h:138
const ElementType ReturnType
Return type for expression template evaluations.
Definition: TDVecTSMatMultExpr.h:153
Header file for the DisableIf class template.
Header file for the multiplication trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Header file for the If class template.
#define BLAZE_CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a column-major dense or sparse matri...
Definition: ColumnMajorMatrix.h:61
#define BLAZE_CONSTRAINT_MUST_BE_ZERO_TYPE(T)
Constraint on the data type.In case the given data type T is not a zero vector or matrix type,...
Definition: Zero.h:61
friend auto multAssign(DenseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseAssign_v< VT2 > >
Multiplication assignment of a transpose dense vector-transpose sparse matrix multiplication to a den...
Definition: TDVecTSMatMultExpr.h:472
#define BLAZE_THROW_OUT_OF_RANGE(MESSAGE)
Macro for the emission of a std::out_of_range exception.This macro encapsulates the default way of Bl...
Definition: Exception.h:331
static constexpr bool useAssign
Compilation switch for the evaluation strategy of the multiplication expression.
Definition: TDVecTSMatMultExpr.h:124
ElementType_t< ResultType > ElementType
Resulting element type.
Definition: TDVecTSMatMultExpr.h:152
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:76
constexpr void MAYBE_UNUSED(const Args &...)
Suppression of unused parameter warnings.
Definition: MaybeUnused.h:81
Header file for the IsAligned type trait.
ResultType_t< MT > MRT
Result type of the right-hand side sparse matrix expression.
Definition: TDVecTSMatMultExpr.h:101
LeftOperand vec_
Left-hand side dense vector of the multiplication expression.
Definition: TDVecTSMatMultExpr.h:294
#define BLAZE_CONSTRAINT_MUST_NOT_BE_MATMATMULTEXPR_TYPE(T)
Constraint on the data type.In case the given data type T is a matrix/matrix multiplication expressio...
Definition: MatMatMultExpr.h:83
Constraint on the data type.
friend auto assign(DenseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseAssign_v< VT2 > >
Assignment of a transpose dense vector-transpose sparse matrix multiplication to a dense vector ( ).
Definition: TDVecTSMatMultExpr.h:314
Header file for the exception macros of the math module.
friend auto smpAddAssign(DenseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseSMPAssign_v< VT2 > >
SMP addition assignment of a transpose dense vector-transpose sparse matrix multiplication to a dense...
Definition: TDVecTSMatMultExpr.h:613
Constraint on the data type.
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: TDVecTSMatMultExpr.h:287
Header file for the EnableIf class template.
friend auto subAssign(DenseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseAssign_v< VT2 > >
Subtraction assignment of a transpose dense vector-transpose sparse matrix multiplication to a dense ...
Definition: TDVecTSMatMultExpr.h:429
typename MultTrait< T1, T2 >::Type MultTrait_t
Auxiliary alias declaration for the MultTrait class template.The MultTrait_t alias declaration provid...
Definition: MultTrait.h:240
typename T::TransposeType TransposeType_t
Alias declaration for nested TransposeType type definitions.The TransposeType_t alias declaration pro...
Definition: Aliases.h:470
Header file for run time assertion macros.
typename T::CompositeType CompositeType_t
Alias declaration for nested CompositeType type definitions.The CompositeType_t alias declaration pro...
Definition: Aliases.h:90
If_t< IsExpression_v< VT >, const VT, const VT & > LeftOperand
Composite type of the left-hand side dense vector expression.
Definition: TDVecTSMatMultExpr.h:159
Header file for the IsZero type trait.
Constraint on the data type.
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:94
Header file for all forward declarations for expression class templates.
constexpr size_t size(const Matrix< MT, SO > &matrix) noexcept
Returns the total number of elements of the matrix.
Definition: Matrix.h:530
Header file for the TVecMatMultExpr base class.
friend auto divAssign(DenseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseAssign_v< VT2 > >
Division assignment of a transpose dense vector-transpose sparse matrix multiplication to a dense vec...
Definition: TDVecTSMatMultExpr.h:508
Constraints on the storage order of matrix types.
decltype(auto) serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:808
friend auto addAssign(DenseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseAssign_v< VT2 > >
Addition assignment of a transpose dense vector-transpose sparse matrix multiplication to a dense vec...
Definition: TDVecTSMatMultExpr.h:386
#define BLAZE_CONSTRAINT_MUST_NOT_REQUIRE_EVALUATION(T)
Constraint on the data type.In case the given data type T requires an intermediate evaluation within ...
Definition: RequiresEvaluation.h:81
constexpr size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:498
#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:61
#define BLAZE_CONSTRAINT_MUST_FORM_VALID_TVECMATMULTEXPR(T1, T2)
Constraint on the data type.In case the given data types T1 and T2 do not form a valid vector/matrix ...
Definition: TVecMatMultExpr.h:104
bool isAligned() const noexcept
Returns whether the operands of the expression are properly aligned in memory.
Definition: TDVecTSMatMultExpr.h:277
CompositeType_t< MT > MCT
Composite type of the right-hand side sparse matrix expression.
Definition: TDVecTSMatMultExpr.h:103
friend auto smpAssign(SparseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseSMPAssign_v< VT2 > >
SMP assignment of a transpose dense vector-transpose sparse matrix multiplication to a sparse vector ...
Definition: TDVecTSMatMultExpr.h:582
Header file for the IsComputation type trait class.
If_t< useAssign, const ResultType, const TDVecTSMatMultExpr & > CompositeType
Data type for composite expression templates.
Definition: TDVecTSMatMultExpr.h:156
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:146
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: TDVecTSMatMultExpr.h:197
#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:61
If_t< evaluateVector, const VRT, VCT > LT
Composite type of the left-hand side dense vector expression.
Definition: TDVecTSMatMultExpr.h:165
static constexpr bool evaluateMatrix
Compilation switch for the composite type of the right-hand side sparse matrix expression.
Definition: TDVecTSMatMultExpr.h:113
typename DisableIf< Condition, T >::Type DisableIf_t
Auxiliary type for the DisableIf class template.The DisableIf_t alias declaration provides a convenie...
Definition: DisableIf.h:138
Constraint on the data type.
static constexpr bool evaluateVector
Compilation switch for the composite type of the left-hand side dense vector expression.
Definition: TDVecTSMatMultExpr.h:108
#define BLAZE_CONSTRAINT_MUST_NOT_BE_ZERO_TYPE(T)
Constraint on the data type.In case the given data type T is a zero vector or matrix type,...
Definition: Zero.h:81
Header file for the thresholds for matrix/vector and matrix/matrix multiplications.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression,...
Definition: Assert.h:101
friend auto assign(SparseVector< VT2, true > &lhs, const TDVecTSMatMultExpr &rhs) -> EnableIf_t< UseAssign_v< VT2 > >
Assignment of a transpose dense vector-transpose sparse matrix multiplication to a sparse vector ( ).
Definition: TDVecTSMatMultExpr.h:354
#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:61
Constraint on the transpose flag of vector types.
Header file for the IsExpression type trait class.
Header file for the function trace functionality.
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: TDVecTSMatMultExpr.h:255