35 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATSERIALEXPR_H_ 36 #define _BLAZE_MATH_EXPRESSIONS_SMATSERIALEXPR_H_ 88 :
public MatSerialExpr< SparseMatrix< SMatSerialExpr<MT,SO>, SO > >
109 enum :
bool { smpAssignable = MT::smpAssignable };
145 if( i >=
sm_.rows() ) {
148 if( j >=
sm_.columns() ) {
160 inline size_t rows() const noexcept {
171 return sm_.columns();
181 return sm_.nonZeros();
192 return sm_.nonZeros(i);
222 template<
typename T >
223 inline bool canAlias(
const T* alias )
const noexcept {
224 return sm_.canAlias( alias );
234 template<
typename T >
235 inline bool isAliased(
const T* alias )
const noexcept {
236 return sm_.isAliased( alias );
246 return sm_.canSMPAssign();
267 template<
typename MT2
276 assign( ~lhs, rhs.sm_ );
293 template<
typename MT2
302 assign( ~lhs, rhs.sm_ );
319 template<
typename MT2
328 addAssign( ~lhs, rhs.sm_ );
345 template<
typename MT2
354 addAssign( ~lhs, rhs.sm_ );
372 template<
typename MT2
381 subAssign( ~lhs, rhs.sm_ );
399 template<
typename MT2
408 subAssign( ~lhs, rhs.sm_ );
426 template<
typename MT2
435 schurAssign( ~lhs, rhs.sm_ );
453 template<
typename MT2
462 schurAssign( ~lhs, rhs.sm_ );
480 template<
typename MT2
489 multAssign( ~lhs, rhs.sm_ );
507 template<
typename MT2
516 multAssign( ~lhs, rhs.sm_ );
533 template<
typename MT2
542 assign( ~lhs, rhs.sm_ );
559 template<
typename MT2
568 assign( ~lhs, rhs.sm_ );
586 template<
typename MT2
595 addAssign( ~lhs, rhs.sm_ );
613 template<
typename MT2
622 addAssign( ~lhs, rhs.sm_ );
640 template<
typename MT2
649 subAssign( ~lhs, rhs.sm_ );
667 template<
typename MT2
676 subAssign( ~lhs, rhs.sm_ );
694 template<
typename MT2
703 schurAssign( ~lhs, rhs.sm_ );
721 template<
typename MT2
730 schurAssign( ~lhs, rhs.sm_ );
748 template<
typename MT2
757 multAssign( ~lhs, rhs.sm_ );
775 template<
typename MT2
784 multAssign( ~lhs, rhs.sm_ );
824 template<
typename MT
855 template<
typename MT
875 template<
typename MT,
bool SO >
876 struct Rows< SMatSerialExpr<MT,SO> >
893 template<
typename MT,
bool SO >
894 struct Columns< SMatSerialExpr<MT,SO> >
911 template<
typename MT,
bool SO >
929 template<
typename MT,
bool SO >
947 template<
typename MT,
bool SO >
948 struct IsLower< SMatSerialExpr<MT,SO> >
965 template<
typename MT,
bool SO >
983 template<
typename MT,
bool SO >
1001 template<
typename MT,
bool SO >
1002 struct IsUpper< SMatSerialExpr<MT,SO> >
1019 template<
typename MT,
bool SO >
1037 template<
typename MT,
bool SO >
Header file for auxiliary alias declarations.
SMatSerialExpr(const MT &sm) noexcept
Constructor for the SMatSerialExpr class.
Definition: SMatSerialExpr.h:117
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: SMatSerialExpr.h:235
ResultType_< MT > ResultType
Result type for expression template evaluations.
Definition: SMatSerialExpr.h:94
Header file for the Rows type trait.
Header file for the IsUniUpper type trait.
EnableIf_< IsDenseMatrix< MT1 > > smpSchurAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP Schur product assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:196
Header file for basic type definitions.
EnableIf_< IsDenseMatrix< MT1 > > smpSubAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:164
#define BLAZE_CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER(T, SO)
Constraint on the data type.In case the given data type T is not a dense or sparse matrix type and in...
Definition: StorageOrder.h:63
size_t nonZeros() const
Returns the number of non-zero elements in the sparse matrix.
Definition: SMatSerialExpr.h:180
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:71
EnableIf_< IsDenseVector< VT1 > > smpMultAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs)
Default implementation of the SMP multiplication assignment of a vector to a dense vector...
Definition: DenseVector.h:193
Compile time check for lower triangular matrices.This type trait tests whether or not the given templ...
Definition: IsLower.h:88
Header file for the Computation base class.
Compile time check for upper triangular matrices.This type trait tests whether or not the given templ...
Definition: IsUpper.h:88
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: SMatSerialExpr.h:144
If_< IsExpression< MT >, const MT, const MT &> Operand
Composite data type of the sparse matrix expression.
Definition: SMatSerialExpr.h:104
Header file for the IsUniLower type trait.
typename T::ResultType ResultType_
Alias declaration for nested ResultType type definitions.The ResultType_ alias declaration provides a...
Definition: Aliases.h:343
EnableIf_< IsDenseMatrix< MT1 > > smpAddAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP addition assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:133
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:78
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:129
typename T::ReturnType ReturnType_
Alias declaration for nested ReturnType type definitions.The ReturnType_ alias declaration provides a...
Definition: Aliases.h:363
Header file for the SparseMatrix base class.
Constraint on the data type.
Compile time check for upper unitriangular matrices.This type trait tests whether or not the given te...
Definition: IsUniUpper.h:86
Header file for the IsStrictlyUpper type trait.
Header file for the IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Operand operand() const noexcept
Returns the sparse matrix operand.
Definition: SMatSerialExpr.h:201
Header file for the If class template.
EnableIf_< IsDenseMatrix< MT1 > > smpAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:102
#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
size_t rows() const noexcept
Returns the current number of rows of the matrix.
Definition: SMatSerialExpr.h:160
Header file for the Columns type trait.
ElementType_< MT > ElementType
Resulting element type.
Definition: SMatSerialExpr.h:97
typename T::ElementType ElementType_
Alias declaration for nested ElementType type definitions.The ElementType_ alias declaration provides...
Definition: Aliases.h:163
Header file for the IsLower type trait.
TransposeType_< MT > TransposeType
Transpose type for expression template evaluations.
Definition: SMatSerialExpr.h:96
Constraints on the storage order of matrix types.
Compile time check for symmetric matrices.This type trait tests whether or not the given template par...
Definition: IsSymmetric.h:85
Header file for the exception macros of the math module.
Compile time check for strictly upper triangular matrices.This type trait tests whether or not the gi...
Definition: IsStrictlyUpper.h:86
Header file for all forward declarations for expression class templates.
Header file for the MatSerialExpr base class.
Header file for the IsStrictlyLower type trait.
Operand sm_
Sparse matrix of the serial evaluation expression.
Definition: SMatSerialExpr.h:252
Compile time check for lower unitriangular matrices.This type trait tests whether or not the given te...
Definition: IsUniLower.h:86
Header file for run time assertion macros.
Utility type for generic codes.
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: SMatSerialExpr.h:245
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: SMatSerialExpr.h:223
typename If< T1, T2, T3 >::Type If_
Auxiliary alias declaration for the If class template.The If_ alias declaration provides a convenient...
Definition: If.h:154
#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
Compile time check for Hermitian matrices.This type trait tests whether or not the given template par...
Definition: IsHermitian.h:85
size_t nonZeros(size_t i) const
Returns the number of non-zero elements in the specified row.
Definition: SMatSerialExpr.h:191
decltype(auto) serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:819
typename T::OppositeType OppositeType_
Alias declaration for nested OppositeType type definitions.The OppositeType_ alias declaration provid...
Definition: Aliases.h:263
ReturnType_< MT > ReturnType
Return type for expression template evaluations.
Definition: SMatSerialExpr.h:98
OppositeType_< MT > OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: SMatSerialExpr.h:95
const ResultType CompositeType
Data type for composite expression templates.
Definition: SMatSerialExpr.h:101
Compile time check for strictly lower triangular matrices.This type trait tests whether or not the gi...
Definition: IsStrictlyLower.h:86
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:3082
Header file for the IntegralConstant class template.
Compile time evaluation of the number of columns of a matrix.The Columns type trait evaluates the num...
Definition: Columns.h:75
Compile time evaluation of the number of rows of a matrix.The Rows type trait evaluates the number of...
Definition: Rows.h:75
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: SMatSerialExpr.h:129
typename T::TransposeType TransposeType_
Alias declaration for nested TransposeType type definitions.The TransposeType_ alias declaration prov...
Definition: Aliases.h:423
Header file for the IsUpper type trait.
size_t columns() const noexcept
Returns the current number of columns of the matrix.
Definition: SMatSerialExpr.h:170
Expression object for the forced serial evaluation of sparse matrices.The SMatSerialExpr class repres...
Definition: Forward.h:115
Header file for the IsHermitian type trait.
#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
#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
Header file for the IsExpression type trait class.
Header file for the function trace functionality.