35 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATSERIALEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_SMATSERIALEXPR_H_
97 class SMatSerialExpr :
public SparseMatrix< SMatSerialExpr<MT,SO>, SO >
98 ,
private MatSerialExpr
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);
232 template<
typename T >
234 return sm_.canAlias( alias );
244 template<
typename T >
246 return sm_.isAliased( alias );
256 return sm_.canSMPAssign();
277 template<
typename MT2
286 assign( ~lhs, rhs.sm_ );
303 template<
typename MT2
312 assign( ~lhs, rhs.sm_ );
329 template<
typename MT2
331 friend inline void addAssign( DenseMatrix<MT2,SO2>& lhs,
const SMatSerialExpr& rhs )
338 addAssign( ~lhs, rhs.sm_ );
355 template<
typename MT2
357 friend inline void addAssign( SparseMatrix<MT2,SO2>& lhs,
const SMatSerialExpr& rhs )
364 addAssign( ~lhs, rhs.sm_ );
382 template<
typename MT2
384 friend inline void subAssign( DenseMatrix<MT2,SO2>& lhs,
const SMatSerialExpr& rhs )
391 subAssign( ~lhs, rhs.sm_ );
409 template<
typename MT2
411 friend inline void subAssign( SparseMatrix<MT2,SO2>& lhs,
const SMatSerialExpr& rhs )
418 subAssign( ~lhs, rhs.sm_ );
436 template<
typename MT2
438 friend inline void multAssign( DenseMatrix<MT2,SO2>& lhs,
const SMatSerialExpr& rhs )
445 multAssign( ~lhs, rhs.sm_ );
463 template<
typename MT2
465 friend inline void multAssign( SparseMatrix<MT2,SO2>& lhs,
const SMatSerialExpr& rhs )
472 multAssign( ~lhs, rhs.sm_ );
489 template<
typename MT2
498 assign( ~lhs, rhs.sm_ );
515 template<
typename MT2
524 assign( ~lhs, rhs.sm_ );
542 template<
typename MT2
551 addAssign( ~lhs, rhs.sm_ );
569 template<
typename MT2
578 addAssign( ~lhs, rhs.sm_ );
596 template<
typename MT2
605 subAssign( ~lhs, rhs.sm_ );
623 template<
typename MT2
632 subAssign( ~lhs, rhs.sm_ );
650 template<
typename MT2
659 multAssign( ~lhs, rhs.sm_ );
677 template<
typename MT2
686 multAssign( ~lhs, rhs.sm_ );
726 template<
typename MT
756 template<
typename MT
758 inline const SMatSerialExpr<MT,SO>
serial(
const SMatSerialExpr<MT,SO>& sm )
776 template<
typename MT,
bool SO >
777 struct Rows< SMatSerialExpr<MT,SO> > :
public Rows<MT>
793 template<
typename MT,
bool SO >
794 struct Columns< SMatSerialExpr<MT,SO> > :
public Columns<MT>
810 template<
typename MT,
bool SO >
811 struct IsSymmetric< SMatSerialExpr<MT,SO> > :
public IsTrue< IsSymmetric<MT>::value >
827 template<
typename MT,
bool SO >
828 struct IsHermitian< SMatSerialExpr<MT,SO> > :
public IsTrue< IsHermitian<MT>::value >
844 template<
typename MT,
bool SO >
845 struct IsLower< SMatSerialExpr<MT,SO> > :
public IsTrue< IsLower<MT>::value >
861 template<
typename MT,
bool SO >
862 struct IsUniLower< SMatSerialExpr<MT,SO> > :
public IsTrue< IsUniLower<MT>::value >
878 template<
typename MT,
bool SO >
879 struct IsStrictlyLower< SMatSerialExpr<MT,SO> > :
public IsTrue< IsStrictlyLower<MT>::value >
895 template<
typename MT,
bool SO >
896 struct IsUpper< SMatSerialExpr<MT,SO> > :
public IsTrue< IsUpper<MT>::value >
912 template<
typename MT,
bool SO >
913 struct IsUniUpper< SMatSerialExpr<MT,SO> > :
public IsTrue< IsUniUpper<MT>::value >
929 template<
typename MT,
bool SO >
930 struct IsStrictlyUpper< SMatSerialExpr<MT,SO> > :
public IsTrue< IsStrictlyUpper<MT>::value >
946 template<
typename MT >
947 struct SMatSerialExprTrait< SMatSerialExpr<MT,false> >
951 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value
952 , SMatSerialExpr<MT,false>
953 , INVALID_TYPE >::Type Type;
962 template<
typename MT >
963 struct TSMatSerialExprTrait< SMatSerialExpr<MT,true> >
967 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value
968 , SMatSerialExpr<MT,true>
969 , INVALID_TYPE >::Type Type;
978 template<
typename MT,
bool SO,
bool AF >
979 struct SubmatrixExprTrait< SMatSerialExpr<MT,SO>, AF >
983 typedef typename SerialExprTrait< typename SubmatrixExprTrait<const MT,AF>::Type >::Type Type;
992 template<
typename MT,
bool SO >
993 struct RowExprTrait< SMatSerialExpr<MT,SO> >
997 typedef typename SerialExprTrait< typename RowExprTrait<const MT>::Type >::Type Type;
1006 template<
typename MT,
bool SO >
1007 struct ColumnExprTrait< SMatSerialExpr<MT,SO> >
1011 typedef typename SerialExprTrait< typename ColumnExprTrait<const MT>::Type >::Type Type;
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: SMatSerialExpr.h:139
Header file for the Rows type trait.
Header file for the IsUniUpper type trait.
Header file for basic type definitions.
SMatSerialExpr(const MT &sm)
Constructor for the SMatSerialExpr class.
Definition: SMatSerialExpr.h:127
Header file for the SMatSerialExprTrait class template.
size_t nonZeros() const
Returns the number of non-zero elements in the sparse matrix.
Definition: SMatSerialExpr.h:190
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 IsColumnMajorMatrix type trait.
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type Operand
Composite data type of the sparse matrix expression.
Definition: SMatSerialExpr.h:114
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:721
Header file for the Computation base class.
MT::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: SMatSerialExpr.h:106
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.
size_t nonZeros(size_t i) const
Returns the number of non-zero elements in the specified row.
Definition: SMatSerialExpr.h:201
Header file for the TSMatSerialExprTrait class template.
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: SMatSerialExpr.h:255
Header file for the SparseMatrix base class.
MT::ResultType ResultType
Result type for expression template evaluations.
Definition: SMatSerialExpr.h:104
Constraint on the data type.
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
size_t rows() const
Returns the current number of rows of the matrix.
Definition: SMatSerialExpr.h:170
#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.
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: SMatSerialExpr.h:233
Header file for the IsLower type trait.
Header file for the SerialExprTrait class template.
const ResultType CompositeType
Data type for composite expression templates.
Definition: SMatSerialExpr.h:111
CompressedMatrix< Type, false > TransposeType
Transpose type for expression template evaluations.
Definition: CompressedMatrix.h:2585
Constraints on the storage order of matrix types.
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: SMatSerialExpr.h:154
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
Header file for the SelectType class template.
Header file for the RowExprTrait class template.
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:262
MT::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: SMatSerialExpr.h:105
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
Utility type for generic codes.
MT::ElementType ElementType
Resulting element type.
Definition: SMatSerialExpr.h:107
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: SMatSerialExpr.h:245
Operand operand() const
Returns the sparse matrix operand.
Definition: SMatSerialExpr.h:211
MT::ReturnType ReturnType
Return type for expression template evaluations.
Definition: SMatSerialExpr.h:108
size_t columns() const
Returns the current number of columns of the matrix.
Definition: SMatSerialExpr.h:180
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.
Header file for the IsUpper type trait.
Header file for exception macros.
Expression object for the forced serial evaluation of sparse matrices.The SMatSerialExpr class repres...
Definition: Forward.h:105
Header file for the IsHermitian type trait.
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
SMatSerialExpr< MT, SO > This
Type of this SMatSerialExpr instance.
Definition: SMatSerialExpr.h:103
#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
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.