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 >
129 static constexpr
bool UseSMPAssign_v = ( MT::smpAssignable &&
useAssign );
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
763 return ReturnType( ~sv, expansion );
814 return ReturnType( ~sv );
834 inline decltype(
auto)
expand( const SparseVector<VT,TF>& sv,
size_t expansion )
840 using ReturnType =
const SVecExpandExpr<VT,TF,E>;
841 return ReturnType( ~sv );
Header file for auxiliary alias declarations.
Header file for basic type definitions.
Header file for the SparseVector base class.
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
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
ResultType_t< VT > RT
Result type of the sparse vector expression.
Definition: SVecExpandExpr.h:95
Header file for the MAYBE_UNUSED function template.
Header file for the RequiresEvaluation type trait.
SVecExpandExpr(const VT &sv, REAs... args) noexcept
Constructor for the SVecExpandExpr class.
Definition: SVecExpandExpr.h:165
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:145
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:154
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.
constexpr void MAYBE_UNUSED(const Args &...)
Suppression of unused parameter warnings.
Definition: MaybeUnused.h:81
#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.
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
Header file for all forward declarations for expression class templates.
Base class for matrices.The Matrix class is a base class for all dense and sparse matrix classes with...
Definition: Forward.h:114
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
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:146
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,...
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