35 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATEVALEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_SMATEVALEXPR_H_
97 class SMatEvalExpr :
public SparseMatrix< SMatEvalExpr<MT,SO>, SO >
119 enum { smpAssignable = MT::smpAssignable };
154 inline ReturnType
at(
size_t i,
size_t j )
const {
155 if( i >=
sm_.rows() ) {
158 if( j >=
sm_.columns() ) {
181 return sm_.columns();
191 return sm_.nonZeros();
202 return sm_.nonZeros(i);
222 template<
typename T >
224 return sm_.canAlias( alias );
234 template<
typename T >
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
321 friend inline void addAssign( DenseMatrix<MT2,SO2>& lhs,
const SMatEvalExpr& rhs )
328 addAssign( ~lhs, rhs.sm_ );
345 template<
typename MT2
347 friend inline void addAssign( SparseMatrix<MT2,SO2>& lhs,
const SMatEvalExpr& rhs )
354 addAssign( ~lhs, rhs.sm_ );
371 template<
typename MT2
373 friend inline void subAssign( DenseMatrix<MT2,SO2>& lhs,
const SMatEvalExpr& rhs )
380 subAssign( ~lhs, rhs.sm_ );
397 template<
typename MT2
399 friend inline void subAssign( SparseMatrix<MT2,SO2>& lhs,
const SMatEvalExpr& rhs )
406 subAssign( ~lhs, rhs.sm_ );
423 template<
typename MT2
425 friend inline void multAssign( DenseMatrix<MT2,SO2>& lhs,
const SMatEvalExpr& rhs )
432 multAssign( ~lhs, rhs.sm_ );
449 template<
typename MT2
451 friend inline void multAssign( SparseMatrix<MT2,SO2>& lhs,
const SMatEvalExpr& rhs )
458 multAssign( ~lhs, rhs.sm_ );
475 template<
typename MT2
501 template<
typename MT2
527 template<
typename MT2
553 template<
typename MT2
579 template<
typename MT2
605 template<
typename MT2
632 template<
typename MT2
659 template<
typename MT2
708 template<
typename MT
738 template<
typename MT
740 inline const SMatEvalExpr<MT,SO>
eval(
const SMatEvalExpr<MT,SO>& sm )
758 template<
typename MT,
bool SO >
759 struct Rows< SMatEvalExpr<MT,SO> > :
public Rows<MT>
775 template<
typename MT,
bool SO >
776 struct Columns< SMatEvalExpr<MT,SO> > :
public Columns<MT>
792 template<
typename MT,
bool SO >
793 struct IsSymmetric< SMatEvalExpr<MT,SO> > :
public IsTrue< IsSymmetric<MT>::value >
809 template<
typename MT,
bool SO >
810 struct IsHermitian< SMatEvalExpr<MT,SO> > :
public IsTrue< IsHermitian<MT>::value >
826 template<
typename MT,
bool SO >
827 struct IsLower< SMatEvalExpr<MT,SO> > :
public IsTrue< IsLower<MT>::value >
843 template<
typename MT,
bool SO >
844 struct IsUniLower< SMatEvalExpr<MT,SO> > :
public IsTrue< IsUniLower<MT>::value >
860 template<
typename MT,
bool SO >
861 struct IsStrictlyLower< SMatEvalExpr<MT,SO> > :
public IsTrue< IsStrictlyLower<MT>::value >
877 template<
typename MT,
bool SO >
878 struct IsUpper< SMatEvalExpr<MT,SO> > :
public IsTrue< IsUpper<MT>::value >
894 template<
typename MT,
bool SO >
895 struct IsUniUpper< SMatEvalExpr<MT,SO> > :
public IsTrue< IsUniUpper<MT>::value >
911 template<
typename MT,
bool SO >
912 struct IsStrictlyUpper< SMatEvalExpr<MT,SO> > :
public IsTrue< IsStrictlyUpper<MT>::value >
928 template<
typename MT >
929 struct SMatEvalExprTrait< SMatEvalExpr<MT,false> >
933 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value
934 , SMatEvalExpr<MT,false>
935 , INVALID_TYPE >::Type Type;
944 template<
typename MT >
945 struct TSMatEvalExprTrait< SMatEvalExpr<MT,true> >
949 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value
950 , SMatEvalExpr<MT,true>
951 , INVALID_TYPE >::Type Type;
960 template<
typename MT,
bool SO,
bool AF >
961 struct SubmatrixExprTrait< SMatEvalExpr<MT,SO>, AF >
965 typedef typename EvalExprTrait< typename SubmatrixExprTrait<const MT,AF>::Type >::Type Type;
974 template<
typename MT,
bool SO >
975 struct RowExprTrait< SMatEvalExpr<MT,SO> >
979 typedef typename EvalExprTrait< typename RowExprTrait<const MT>::Type >::Type Type;
988 template<
typename MT,
bool SO >
989 struct ColumnExprTrait< SMatEvalExpr<MT,SO> >
993 typedef typename EvalExprTrait< typename ColumnExprTrait<const MT>::Type >::Type Type;
MT::ReturnType ReturnType
Return type for expression template evaluations.
Definition: SMatEvalExpr.h:108
Header file for the Rows type trait.
Header file for the IsUniUpper type trait.
Header file for basic type definitions.
size_t columns() const
Returns the current number of columns of the matrix.
Definition: SMatEvalExpr.h:180
Header file for the IsSparseMatrix type trait.
#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:81
Header file for the ColumnExprTrait class template.
Header file for the TSMatEvalExprTrait class template.
Header file for the IsColumnMajorMatrix type trait.
Header file for the MatEvalExpr base class.
Header file for the Computation base class.
Operand operand() const
Returns the sparse matrix operand.
Definition: SMatEvalExpr.h:211
Header file for the IsUniLower type trait.
CompressedMatrix< Type, false > OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: CompressedMatrix.h:2584
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:70
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:117
Constraint on the data type.
SMatEvalExpr< MT, SO > This
Type of this SMatEvalExpr instance.
Definition: SMatEvalExpr.h:103
Header file for the SparseMatrix base class.
Constraint on the data type.
Header file for the SMatEvalExprTrait class template.
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 IsStrictlyUpper type trait.
Header file for the IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
#define BLAZE_THROW_OUT_OF_RANGE(MESSAGE)
Macro for the emission of a std::out_of_range exceptionThis macro encapsulates the default way of Bla...
Definition: Exception.h:331
Header file for the Columns type trait.
Header file for the IsLower type trait.
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type Operand
Composite data type of the sparse matrix expression.
Definition: SMatEvalExpr.h:114
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: SMatEvalExpr.h:139
CompressedMatrix< Type, false > TransposeType
Transpose type for expression template evaluations.
Definition: CompressedMatrix.h:2585
Constraints on the storage order of matrix types.
size_t rows() const
Returns the current number of rows of the matrix.
Definition: SMatEvalExpr.h:170
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
size_t nonZeros(size_t i) const
Returns the number of non-zero elements in the specified row.
Definition: SMatEvalExpr.h:201
Header file for the SelectType class template.
Header file for the RowExprTrait class template.
Header file for all forward declarations for expression class templates.
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: SMatEvalExpr.h:154
Header file for the IsStrictlyLower type trait.
Operand sm_
Sparse matrix of the evaluation expression.
Definition: SMatEvalExpr.h:252
size_t nonZeros() const
Returns the number of non-zero elements in the sparse matrix.
Definition: SMatEvalExpr.h:190
EnableIf< IsDenseMatrix< MT1 > >::Type 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:160
Header file for the SubmatrixExprTrait class template.
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2587
Header file for run time assertion macros.
EnableIf< IsDenseMatrix< MT1 > >::Type 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:98
MT::ElementType ElementType
Resulting element type.
Definition: SMatEvalExpr.h:107
Utility type for generic codes.
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: SMatEvalExpr.h:223
Header file for the EvalExprTrait class template.
const DMatEvalExpr< MT, SO > eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:703
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: SMatEvalExpr.h:245
const ResultType CompositeType
Data type for composite expression templates.
Definition: SMatEvalExpr.h:111
Header file for the IsRowMajorMatrix type trait.
EnableIf< IsDenseMatrix< MT1 > >::Type 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:129
#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
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2583
Header file for the IsTrue value trait.
Expression object for the forced evaluation of sparse matrices.The SMatEvalExpr class represents the ...
Definition: Forward.h:100
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: SMatEvalExpr.h:235
SMatEvalExpr(const MT &sm)
Constructor for the SMatEvalExpr class.
Definition: SMatEvalExpr.h:127
Header file for the IsUpper type trait.
Header file for exception macros.
Header file for the IsHermitian type trait.
MT::ResultType ResultType
Result type for expression template evaluations.
Definition: SMatEvalExpr.h:104
EnableIf< IsDenseVector< VT1 > >::Type 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:189
#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
MT::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: SMatEvalExpr.h:106
#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
MT::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: SMatEvalExpr.h:105
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.