35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSERIALEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATSERIALEXPR_H_
122 enum :
bool { simdEnabled =
false };
125 enum :
bool { smpAssignable = MT::smpAssignable };
160 inline ReturnType
at(
size_t i,
size_t j )
const {
161 if( i >=
dm_.rows() ) {
164 if( j >=
dm_.columns() ) {
176 inline size_t rows() const noexcept {
187 return dm_.columns();
217 template<
typename T >
218 inline bool canAlias(
const T* alias )
const noexcept {
219 return dm_.canAlias( alias );
229 template<
typename T >
230 inline bool isAliased(
const T* alias )
const noexcept {
231 return dm_.isAliased( alias );
241 return dm_.isAligned();
251 return dm_.canSMPAssign();
272 template<
typename MT2
281 assign( ~lhs, rhs.
dm_ );
298 template<
typename MT2
307 assign( ~lhs, rhs.
dm_ );
324 template<
typename MT2
326 friend inline void addAssign( DenseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
333 addAssign( ~lhs, rhs.dm_ );
350 template<
typename MT2
352 friend inline void addAssign( SparseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
359 addAssign( ~lhs, rhs.dm_ );
377 template<
typename MT2
379 friend inline void subAssign( DenseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
386 subAssign( ~lhs, rhs.dm_ );
404 template<
typename MT2
406 friend inline void subAssign( SparseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
413 subAssign( ~lhs, rhs.dm_ );
431 template<
typename MT2
433 friend inline void multAssign( DenseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
440 multAssign( ~lhs, rhs.sm_ );
458 template<
typename MT2
460 friend inline void multAssign( SparseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
467 multAssign( ~lhs, rhs.sm_ );
484 template<
typename MT2
493 assign( ~lhs, rhs.dm_ );
510 template<
typename MT2
519 assign( ~lhs, rhs.dm_ );
537 template<
typename MT2
546 addAssign( ~lhs, rhs.dm_ );
564 template<
typename MT2
573 addAssign( ~lhs, rhs.dm_ );
591 template<
typename MT2
600 subAssign( ~lhs, rhs.dm_ );
618 template<
typename MT2
627 subAssign( ~lhs, rhs.dm_ );
645 template<
typename MT2
654 multAssign( ~lhs, rhs.sm_ );
672 template<
typename MT2
681 multAssign( ~lhs, rhs.sm_ );
721 template<
typename MT
751 template<
typename MT
753 inline const DMatSerialExpr<MT,SO>
serial(
const DMatSerialExpr<MT,SO>& dm )
771 template<
typename MT,
bool SO >
772 struct Rows< DMatSerialExpr<MT,SO> > :
public Rows<MT>
788 template<
typename MT,
bool SO >
789 struct Columns< DMatSerialExpr<MT,SO> > :
public Columns<MT>
805 template<
typename MT,
bool SO >
806 struct IsAligned< DMatSerialExpr<MT,SO> >
823 template<
typename MT,
bool SO >
824 struct IsSymmetric< DMatSerialExpr<MT,SO> >
841 template<
typename MT,
bool SO >
842 struct IsHermitian< DMatSerialExpr<MT,SO> >
859 template<
typename MT,
bool SO >
860 struct IsLower< DMatSerialExpr<MT,SO> >
877 template<
typename MT,
bool SO >
878 struct IsUniLower< DMatSerialExpr<MT,SO> >
895 template<
typename MT,
bool SO >
896 struct IsStrictlyLower< DMatSerialExpr<MT,SO> >
913 template<
typename MT,
bool SO >
914 struct IsUpper< DMatSerialExpr<MT,SO> >
931 template<
typename MT,
bool SO >
932 struct IsUniUpper< DMatSerialExpr<MT,SO> >
949 template<
typename MT,
bool SO >
950 struct IsStrictlyUpper< DMatSerialExpr<MT,SO> >
967 template<
typename MT >
968 struct DMatSerialExprTrait< DMatSerialExpr<MT,false> >
972 using Type = If_< And< IsDenseMatrix<MT>, IsRowMajorMatrix<MT> >
973 , DMatSerialExpr<MT,false>
983 template<
typename MT >
984 struct TDMatSerialExprTrait< DMatSerialExpr<MT,true> >
988 using Type = If_< And< IsDenseMatrix<MT>, IsColumnMajorMatrix<MT> >
989 , DMatSerialExpr<MT,true>
999 template<
typename MT,
bool SO,
bool AF >
1000 struct SubmatrixExprTrait< DMatSerialExpr<MT,SO>, AF >
1004 using Type = SerialExprTrait_< SubmatrixExprTrait_<const MT,AF> >;
1013 template<
typename MT,
bool SO >
1014 struct RowExprTrait< DMatSerialExpr<MT,SO> >
1018 using Type = SerialExprTrait_< RowExprTrait_<const MT> >;
1027 template<
typename MT,
bool SO >
1028 struct ColumnExprTrait< DMatSerialExpr<MT,SO> >
1032 using Type = SerialExprTrait_< ColumnExprTrait_<const MT> >;
Header file for auxiliary alias declarations.
DMatSerialExpr(const MT &dm) noexcept
Constructor for the DMatSerialExpr class.
Definition: DMatSerialExpr.h:133
Header file for the Rows type trait.
Header file for the IsUniUpper type trait.
Header file for basic type definitions.
Base class for all matrix serial evaluation expression templates.The MatSerialExpr class serves as a ...
Definition: MatSerialExpr.h:65
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:160
#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
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a dense, N-dimensional matrix type...
Definition: DenseMatrix.h:61
Header file for the ColumnExprTrait class template.
Header file for the IsColumnMajorMatrix type trait.
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: DMatSerialExpr.h:250
OppositeType_< MT > OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatSerialExpr.h:108
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
Header file for the And class template.
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:723
ReturnType_< MT > ReturnType
Return type for expression template evaluations.
Definition: DMatSerialExpr.h:111
Header file for the Computation base class.
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: DMatSerialExpr.h:145
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:323
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:129
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:109
const ResultType CompositeType
Data type for composite expression templates.
Definition: DMatSerialExpr.h:114
Constraint on the data type.
typename T::ReturnType ReturnType_
Alias declaration for nested ReturnType type definitions.The ReturnType_ alias declaration provides a...
Definition: Aliases.h:343
Constraint on the data type.
Header file for the IsStrictlyUpper type trait.
DMatSerialExpr< MT, SO > This
Type of this DMatSerialExpr instance.
Definition: DMatSerialExpr.h:106
Header file for the IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the If class template.
Expression object for the forced serial evaluation of dense matrices.The DMatSerialExpr class represe...
Definition: DMatSerialExpr.h:100
Header file for the DMatSerialExprTrait 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:98
#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
Header file for the DenseMatrix base class.
Header file for the Columns type trait.
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.
Header file for the IsAligned type trait.
Header file for the SerialExprTrait class template.
bool isAligned() const noexcept
Returns whether the operands of the expression are properly aligned in memory.
Definition: DMatSerialExpr.h:240
Constraints on the storage order of matrix types.
Header file for the exception macros of the math module.
Header file for the RowExprTrait class template.
Header file for all forward declarations for expression class templates.
Header file for the IsDenseMatrix type trait.
Header file for the MatSerialExpr base class.
Header file for the IsStrictlyLower type trait.
Header file for the TDMatSerialExprTrait class template.
ElementType_< MT > ElementType
Resulting element type.
Definition: DMatSerialExpr.h:110
Header file for the SubmatrixExprTrait class template.
If_< IsExpression< MT >, const MT, const MT & > Operand
Composite data type of the dense matrix expression.
Definition: DMatSerialExpr.h:117
Header file for run time assertion macros.
Utility type for generic codes.
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: DMatSerialExpr.h:160
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:160
size_t columns() const noexcept
Returns the current number of columns of the matrix.
Definition: DMatSerialExpr.h:186
size_t rows() const noexcept
Returns the current number of rows of the matrix.
Definition: DMatSerialExpr.h:176
IntegralConstant< bool, B > BoolConstant
Generic wrapper for a compile time constant boolean value.The BoolConstant class template represents ...
Definition: IntegralConstant.h:100
typename T::OppositeType OppositeType_
Alias declaration for nested OppositeType type definitions.The OppositeType_ alias declaration provid...
Definition: Aliases.h:243
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: DMatSerialExpr.h:230
Operand operand() const noexcept
Returns the dense matrix operand.
Definition: DMatSerialExpr.h:196
Header file for the IsRowMajorMatrix type trait.
TransposeType_< MT > TransposeType
Transpose type for expression template evaluations.
Definition: DMatSerialExpr.h:109
Base class for all compute expression templates.The Computation class serves as a tag for all computa...
Definition: Computation.h:59
ResultType_< MT > ResultType
Result type for expression template evaluations.
Definition: DMatSerialExpr.h:107
#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
Header file for the IntegralConstant class template.
typename T::TransposeType TransposeType_
Alias declaration for nested TransposeType type definitions.The TransposeType_ alias declaration prov...
Definition: Aliases.h:403
Header file for the IsUpper type trait.
Operand dm_
Dense matrix of the serial evaluation expression.
Definition: DMatSerialExpr.h:257
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: DMatSerialExpr.h:218
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
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.