35 #ifndef _BLAZE_MATH_EXPRESSIONS_SVECEXPANDEXPR_H_ 36 #define _BLAZE_MATH_EXPRESSIONS_SVECEXPANDEXPR_H_ 89 :
public VecExpandExpr< SparseMatrix< SVecExpandExpr<VT,TF,CEAs...>, !TF >, CEAs... >
90 ,
private Transformation
91 ,
private ExpandExprData<CEAs...>
111 static constexpr
bool useAssign = IsComputation_v<VT> || RequiresEvaluation_v<VT>;
114 template<
typename MT >
116 static constexpr
bool UseAssign_v =
useAssign;
128 template<
typename MT >
164 template<
typename... REAs >
201 if( i >= ( TF ? expansion() :
sv_.size() ) ) {
204 if( j >= ( TF ?
sv_.size() : expansion() ) ) {
240 inline size_t rows() const noexcept {
241 return ( TF ? expansion() :
sv_.size() );
251 return ( TF ?
sv_.size() : expansion() );
261 return sv_.nonZeros() * expansion();
273 return sv_.nonZeros();
286 return sv_.find( TF ? j : i );
299 return sv_.lowerBound( TF ? j : i );
312 return sv_.upperBound( TF ? j : i );
327 using DataType::expansion;
336 template<
typename T >
337 inline bool canAlias(
const T* alias )
const noexcept {
338 return sv_.isAliased( alias );
348 template<
typename T >
349 inline bool isAliased(
const T* alias )
const noexcept {
350 return sv_.isAliased( alias );
360 return sv_.canSMPAssign();
383 template<
typename MT
397 assign( ~lhs, expand<CEAs...>( tmp, rhs.expansion() ) );
416 template<
typename MT
430 addAssign( ~lhs, expand<CEAs...>( tmp, rhs.expansion() ) );
449 template<
typename MT
451 friend inline auto subAssign( Matrix<MT,SO>& lhs,
const SVecExpandExpr& rhs )
452 -> EnableIf_t< UseAssign_v<MT> >
463 subAssign( ~lhs, expand<CEAs...>( tmp, rhs.expansion() ) );
482 template<
typename MT
484 friend inline auto schurAssign( Matrix<MT,SO>& lhs,
const SVecExpandExpr& rhs )
485 -> EnableIf_t< UseAssign_v<MT> >
496 schurAssign( ~lhs, expand<CEAs...>( tmp, rhs.expansion() ) );
515 template<
typename MT
517 friend inline auto multAssign( Matrix<MT,SO>& lhs,
const SVecExpandExpr& rhs )
518 -> EnableIf_t< UseAssign_v<MT> >
529 multAssign( ~lhs, expand<CEAs...>( tmp, rhs.expansion() ) );
548 template<
typename MT
551 -> EnableIf_t< UseSMPAssign_v<MT> >
560 const RT tmp( ~rhs.sv_ );
562 smpAssign( ~lhs, expand<CEAs...>( tmp, rhs.expansion() ) );
581 template<
typename MT
584 -> EnableIf_t< UseSMPAssign_v<MT> >
593 const RT tmp( ~rhs.sv_ );
595 smpAddAssign( ~lhs, expand<CEAs...>( tmp, rhs.expansion() ) );
614 template<
typename MT
617 -> EnableIf_t< UseSMPAssign_v<MT> >
626 const RT tmp( ~rhs.sv_ );
628 smpSubAssign( ~lhs, expand<CEAs...>( tmp, rhs.expansion() ) );
647 template<
typename MT
650 -> EnableIf_t< UseSMPAssign_v<MT> >
659 const RT tmp( ~rhs.sv_ );
680 template<
typename MT
683 -> EnableIf_t< UseSMPAssign_v<MT> >
692 const RT tmp( ~rhs.sv_ );
694 smpMultAssign( ~lhs, expand<CEAs...>( tmp, rhs.expansion() ) );
756 template<
typename VT
834 inline decltype(
auto)
expand( const SparseVector<VT,TF>& sv,
size_t expansion )
840 using ReturnType =
const SVecExpandExpr<VT,TF,E>;
Header file for auxiliary alias declarations.
Header file for the UNUSED_PARAMETER function template.
Header file for basic type definitions.
Header file for the SparseVector base class.
typename If< Condition, T1, T2 >::Type If_t
Auxiliary alias declaration for the If class template.The If_t alias declaration provides a convenien...
Definition: If.h:109
Header file for the implementation of the ExpandExprData class template.
static constexpr bool useAssign
Compilation switch for the serial evaluation strategy of the expansion expression.
Definition: SVecExpandExpr.h:111
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.
ConstIterator find(size_t i, size_t j) const
Searches for a specific matrix element.
Definition: SVecExpandExpr.h:284
static constexpr bool smpAssignable
Compilation flag for SMP assignments.
Definition: CompressedMatrix.h:3113
ResultType_t< VT > RT
Result type of the sparse vector expression.
Definition: SVecExpandExpr.h:95
Header file for the RequiresEvaluation type trait.
SVecExpandExpr(const VT &sv, REAs... args) noexcept
Constructor for the SVecExpandExpr class.
Definition: SVecExpandExpr.h:165
constexpr void UNUSED_PARAMETER(const Args &...)
Suppression of unused parameter warnings.
Definition: Unused.h:81
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: SVecExpandExpr.h:349
typename T::ReturnType ReturnType_t
Alias declaration for nested ReturnType type definitions.The ReturnType_t alias declaration provides ...
Definition: Aliases.h:410
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:137
typename T::ElementType ElementType_t
Alias declaration for nested ElementType type definitions.The ElementType_t alias declaration provide...
Definition: Aliases.h:170
Header file for the SparseMatrix base class.
ExpandExprData< CEAs... > DataType
The type of the ExpandExprData base class.
Definition: SVecExpandExpr.h:97
size_t nonZeros() const
Returns the number of non-zero elements in the sparse matrix.
Definition: SVecExpandExpr.h:260
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
Operand sv_
Sparse vector of the expansion expression.
Definition: SVecExpandExpr.h:366
OppositeType_t< ResultType > OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: SVecExpandExpr.h:138
static constexpr bool smpAssignable
Compilation switch for the expression template assignment strategy.
Definition: SVecExpandExpr.h:155
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: SVecExpandExpr.h:178
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Header file for the If class template.
size_t rows() const noexcept
Returns the current number of rows of the matrix.
Definition: SVecExpandExpr.h:240
ReturnType_t< VT > ReturnType
Return type for expression template evaluations.
Definition: SVecExpandExpr.h:141
Header file for the expand trait.
ExpandTrait_t< VT, CEAs... > ResultType
Result type for expression template evaluations.
Definition: SVecExpandExpr.h:137
#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
Expression object for sparse vector expansion.The SVecExpandExpr class represents the compile time ex...
Definition: Forward.h:145
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: SVecExpandExpr.h:337
Header file for the GetMemberType type trait.
#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:61
Constraint on the data type.
Header file for the exception macros of the math module.
TransposeType_t< ResultType > TransposeType
Transpose type for expression template evaluations.
Definition: SVecExpandExpr.h:139
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: SVecExpandExpr.h:200
Constraint on the data type.
Header file for all forward declarations for expression class templates.
Constraint on the data type.
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: SVecExpandExpr.h:359
Header file for the EnableIf class template.
BLAZE_CREATE_GET_TYPE_MEMBER_TYPE_TRAIT(GetConstIterator, ConstIterator, INVALID_TYPE)
Definition of the GetConstIterator type trait.
typename T::OppositeType OppositeType_t
Alias declaration for nested OppositeType type definitions.The OppositeType_t alias declaration provi...
Definition: Aliases.h:270
GetConstIterator_t< VT > ConstIterator
Iterator over the elements of the sparse matrix.
Definition: SVecExpandExpr.h:147
If_t< useAssign, const ResultType, const SVecExpandExpr &> CompositeType
Data type for composite expression templates.
Definition: SVecExpandExpr.h:144
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.
Utility type for generic codes.
auto smpAddAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP addition assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:131
decltype(auto) expand(const DenseVector< VT, TF > &dv, size_t expansion)
Expansion of the given dense vector.
Definition: DVecExpandExpr.h:739
#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
Base class for matrices.The Matrix class is a base class for all dense and sparse matrix classes with...
Definition: Forward.h:109
auto smpAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:100
ConstIterator end(size_t i) const
Returns an iterator just past the last non-zero element of row/column i.
Definition: SVecExpandExpr.h:229
decltype(auto) serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:808
#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
size_t nonZeros(size_t i) const
Returns the number of non-zero elements in the specified row/column.
Definition: SVecExpandExpr.h:271
auto smpSchurAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP Schur product assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:194
If_t< IsExpression_v< VT >, const VT, const VT &> Operand
Composite data type of the sparse matrix expression.
Definition: SVecExpandExpr.h:150
typename ExpandTrait< T, CEAs... >::Type ExpandTrait_t
Auxiliary alias declaration for the ExpandTrait type trait.The ExpandTrait_t alias declaration provid...
Definition: ExpandTrait.h:171
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:3081
Header file for the VecExpandExpr base class.
Header file for the IsComputation type trait class.
auto smpSubAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:162
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:138
Operand operand() const noexcept
Returns the sparse vector operand.
Definition: SVecExpandExpr.h:321
ConstIterator begin(size_t i) const
Returns an iterator to the first non-zero element of row/column i.
Definition: SVecExpandExpr.h:217
System settings for the inline keywords.
#define BLAZE_CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG(T, TF)
Constraint on the data type.In case the given data type T is not a dense or sparse vector type and in...
Definition: TransposeFlag.h:63
#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
auto smpMultAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs) -> EnableIf_t< IsDenseVector_v< VT1 > >
Default implementation of the SMP multiplication assignment of a vector to a dense vector...
Definition: DenseVector.h:191
Header file for the IsExpression type trait class.
size_t columns() const noexcept
Returns the current number of columns of the matrix.
Definition: SVecExpandExpr.h:250
ElementType_t< VT > ElementType
Resulting element type.
Definition: SVecExpandExpr.h:140
Header file for the function trace functionality.
ConstIterator upperBound(size_t i, size_t j) const
Returns an iterator to the first index greater then the given index.
Definition: SVecExpandExpr.h:310
ConstIterator lowerBound(size_t i, size_t j) const
Returns an iterator to the first index not less then the given index.
Definition: SVecExpandExpr.h:297