35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATEVALEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATEVALEXPR_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();
207 template<
typename T >
208 inline bool canAlias(
const T* alias )
const noexcept {
209 return dm_.canAlias( alias );
219 template<
typename T >
220 inline bool isAliased(
const T* alias )
const noexcept {
221 return dm_.isAliased( alias );
231 return dm_.isAligned();
241 return dm_.canSMPAssign();
262 template<
typename MT2
271 assign( ~lhs, rhs.
dm_ );
288 template<
typename MT2
297 assign( ~lhs, rhs.
dm_ );
314 template<
typename MT2
316 friend inline void addAssign( DenseMatrix<MT2,SO2>& lhs,
const DMatEvalExpr& rhs )
323 addAssign( ~lhs, rhs.dm_ );
340 template<
typename MT2
342 friend inline void addAssign( SparseMatrix<MT2,SO2>& lhs,
const DMatEvalExpr& rhs )
349 addAssign( ~lhs, rhs.dm_ );
366 template<
typename MT2
368 friend inline void subAssign( DenseMatrix<MT2,SO2>& lhs,
const DMatEvalExpr& rhs )
375 subAssign( ~lhs, rhs.dm_ );
392 template<
typename MT2
394 friend inline void subAssign( SparseMatrix<MT2,SO2>& lhs,
const DMatEvalExpr& rhs )
401 subAssign( ~lhs, rhs.dm_ );
418 template<
typename MT2
420 friend inline void multAssign( DenseMatrix<MT2,SO2>& lhs,
const DMatEvalExpr& rhs )
427 multAssign( ~lhs, rhs.dm_ );
444 template<
typename MT2
446 friend inline void multAssign( SparseMatrix<MT2,SO2>& lhs,
const DMatEvalExpr& rhs )
453 multAssign( ~lhs, rhs.dm_ );
470 template<
typename MT2
496 template<
typename MT2
522 template<
typename MT2
548 template<
typename MT2
574 template<
typename MT2
600 template<
typename MT2
627 template<
typename MT2
654 template<
typename MT2
703 template<
typename MT
733 template<
typename MT
735 inline const DMatEvalExpr<MT,SO>
eval(
const DMatEvalExpr<MT,SO>& dm )
753 template<
typename MT,
bool SO >
754 struct Rows< DMatEvalExpr<MT,SO> > :
public Rows<MT>
770 template<
typename MT,
bool SO >
771 struct Columns< DMatEvalExpr<MT,SO> > :
public Columns<MT>
787 template<
typename MT,
bool SO >
788 struct IsAligned< DMatEvalExpr<MT,SO> >
805 template<
typename MT,
bool SO >
806 struct IsSymmetric< DMatEvalExpr<MT,SO> >
823 template<
typename MT,
bool SO >
824 struct IsHermitian< DMatEvalExpr<MT,SO> >
841 template<
typename MT,
bool SO >
842 struct IsLower< DMatEvalExpr<MT,SO> >
859 template<
typename MT,
bool SO >
860 struct IsUniLower< DMatEvalExpr<MT,SO> >
877 template<
typename MT,
bool SO >
878 struct IsStrictlyLower< DMatEvalExpr<MT,SO> >
895 template<
typename MT,
bool SO >
896 struct IsUpper< DMatEvalExpr<MT,SO> >
913 template<
typename MT,
bool SO >
914 struct IsUniUpper< DMatEvalExpr<MT,SO> >
931 template<
typename MT,
bool SO >
932 struct IsStrictlyUpper< DMatEvalExpr<MT,SO> >
949 template<
typename MT >
950 struct DMatEvalExprTrait< DMatEvalExpr<MT,false> >
954 using Type = If_< And< IsDenseMatrix<MT>, IsRowMajorMatrix<MT> >
955 , DMatEvalExpr<MT,false>
965 template<
typename MT >
966 struct TDMatEvalExprTrait< DMatEvalExpr<MT,true> >
970 using Type = If_< And< IsDenseMatrix<MT>, IsColumnMajorMatrix<MT> >
971 , DMatEvalExpr<MT,true>
981 template<
typename MT,
bool SO,
bool AF >
982 struct SubmatrixExprTrait< DMatEvalExpr<MT,SO>, AF >
986 using Type = EvalExprTrait_< SubmatrixExprTrait_<const MT,AF> >;
995 template<
typename MT,
bool SO >
996 struct RowExprTrait< DMatEvalExpr<MT,SO> >
1000 using Type = EvalExprTrait_< RowExprTrait_<const MT> >;
1009 template<
typename MT,
bool SO >
1010 struct ColumnExprTrait< DMatEvalExpr<MT,SO> >
1014 using Type = EvalExprTrait_< ColumnExprTrait_<const MT> >;
DMatEvalExpr(const MT &dm) noexcept
Constructor for the DMatEvalExpr class.
Definition: DMatEvalExpr.h:133
Header file for auxiliary alias declarations.
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: DMatEvalExpr.h:208
Header file for the Rows type trait.
Header file for the IsUniUpper type trait.
Header file for basic type definitions.
Header file for the DMatEvalExprTrait class template.
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: DMatEvalExpr.h:160
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.
size_t rows() const noexcept
Returns the current number of rows of the matrix.
Definition: DMatEvalExpr.h:176
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.
Header file for the MatEvalExpr base class.
Header file for the Computation base class.
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
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
OppositeType_< MT > OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatEvalExpr.h:108
Constraint on the data type.
DMatEvalExpr< MT, SO > This
Type of this DMatEvalExpr instance.
Definition: DMatEvalExpr.h:106
ReturnType_< MT > ReturnType
Return type for expression template evaluations.
Definition: DMatEvalExpr.h:111
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
Header file for the If class template.
If_< IsExpression< MT >, const MT, const MT & > Operand
Composite data type of the dense matrix expression.
Definition: DMatEvalExpr.h:117
TransposeType_< MT > TransposeType
Transpose type for expression template evaluations.
Definition: DMatEvalExpr.h:109
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
const ResultType CompositeType
Data type for composite expression templates.
Definition: DMatEvalExpr.h:114
Header file for the IsLower type trait.
Header file for the IsAligned type trait.
Constraints on the storage order of matrix types.
bool isAligned() const noexcept
Returns whether the operands of the expression are properly aligned in memory.
Definition: DMatEvalExpr.h:230
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 IsStrictlyLower type trait.
Operand dm_
Dense matrix of the evaluation expression.
Definition: DMatEvalExpr.h:247
Header file for the SubmatrixExprTrait class template.
Operand operand() const noexcept
Returns the dense matrix operand.
Definition: DMatEvalExpr.h:196
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: DMatEvalExpr.h:240
Header file for run time assertion macros.
Utility type for generic codes.
Header file for the EvalExprTrait class template.
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
Base class for all matrix evaluation expression templates.The MatEvalExpr class serves as a tag for a...
Definition: MatEvalExpr.h:65
const DMatEvalExpr< MT, SO > eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:705
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
Header file for the IsRowMajorMatrix type trait.
Expression object for the forced evaluation of dense matrices.The DMatEvalExpr class represents the c...
Definition: DMatEvalExpr.h:100
Base class for all compute expression templates.The Computation class serves as a tag for all computa...
Definition: Computation.h:59
#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
ResultType_< MT > ResultType
Result type for expression template evaluations.
Definition: DMatEvalExpr.h:107
Header file for the TDMatEvalExprTrait class template.
Header file for the IntegralConstant class template.
ElementType_< MT > ElementType
Resulting element type.
Definition: DMatEvalExpr.h:110
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.
size_t columns() const noexcept
Returns the current number of columns of the matrix.
Definition: DMatEvalExpr.h:186
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: DMatEvalExpr.h:220
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: DMatEvalExpr.h:145
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.