35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSERIALEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATSERIALEXPR_H_
120 enum { vectorizable = 0 };
123 enum { smpAssignable = MT::smpAssignable };
158 inline ReturnType
at(
size_t i,
size_t j )
const {
159 if( i >=
dm_.rows() ) {
162 if( j >=
dm_.columns() ) {
185 return dm_.columns();
215 template<
typename T >
217 return dm_.canAlias( alias );
227 template<
typename T >
229 return dm_.isAliased( alias );
239 return dm_.isAligned();
249 return dm_.canSMPAssign();
270 template<
typename MT2
279 assign( ~lhs, rhs.
dm_ );
296 template<
typename MT2
305 assign( ~lhs, rhs.
dm_ );
322 template<
typename MT2
324 friend inline void addAssign( DenseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
331 addAssign( ~lhs, rhs.dm_ );
348 template<
typename MT2
350 friend inline void addAssign( SparseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
357 addAssign( ~lhs, rhs.dm_ );
375 template<
typename MT2
377 friend inline void subAssign( DenseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
384 subAssign( ~lhs, rhs.dm_ );
402 template<
typename MT2
404 friend inline void subAssign( SparseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
411 subAssign( ~lhs, rhs.dm_ );
429 template<
typename MT2
431 friend inline void multAssign( DenseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
438 multAssign( ~lhs, rhs.sm_ );
456 template<
typename MT2
458 friend inline void multAssign( SparseMatrix<MT2,SO2>& lhs,
const DMatSerialExpr& rhs )
465 multAssign( ~lhs, rhs.sm_ );
482 template<
typename MT2
491 assign( ~lhs, rhs.dm_ );
508 template<
typename MT2
517 assign( ~lhs, rhs.dm_ );
535 template<
typename MT2
544 addAssign( ~lhs, rhs.dm_ );
562 template<
typename MT2
571 addAssign( ~lhs, rhs.dm_ );
589 template<
typename MT2
598 subAssign( ~lhs, rhs.dm_ );
616 template<
typename MT2
625 subAssign( ~lhs, rhs.dm_ );
643 template<
typename MT2
652 multAssign( ~lhs, rhs.sm_ );
670 template<
typename MT2
679 multAssign( ~lhs, rhs.sm_ );
719 template<
typename MT
749 template<
typename MT
751 inline const DMatSerialExpr<MT,SO>
serial(
const DMatSerialExpr<MT,SO>& dm )
769 template<
typename MT,
bool SO >
770 struct Rows< DMatSerialExpr<MT,SO> > :
public Rows<MT>
786 template<
typename MT,
bool SO >
787 struct Columns< DMatSerialExpr<MT,SO> > :
public Columns<MT>
803 template<
typename MT,
bool SO >
804 struct IsAligned< DMatSerialExpr<MT,SO> > :
public IsTrue< IsAligned<MT>::value >
820 template<
typename MT,
bool SO >
821 struct IsSymmetric< DMatSerialExpr<MT,SO> > :
public IsTrue< IsSymmetric<MT>::value >
837 template<
typename MT,
bool SO >
838 struct IsHermitian< DMatSerialExpr<MT,SO> > :
public IsTrue< IsHermitian<MT>::value >
854 template<
typename MT,
bool SO >
855 struct IsLower< DMatSerialExpr<MT,SO> > :
public IsTrue< IsLower<MT>::value >
871 template<
typename MT,
bool SO >
872 struct IsUniLower< DMatSerialExpr<MT,SO> > :
public IsTrue< IsUniLower<MT>::value >
888 template<
typename MT,
bool SO >
889 struct IsStrictlyLower< DMatSerialExpr<MT,SO> > :
public IsTrue< IsStrictlyLower<MT>::value >
905 template<
typename MT,
bool SO >
906 struct IsUpper< DMatSerialExpr<MT,SO> > :
public IsTrue< IsUpper<MT>::value >
922 template<
typename MT,
bool SO >
923 struct IsUniUpper< DMatSerialExpr<MT,SO> > :
public IsTrue< IsUniUpper<MT>::value >
939 template<
typename MT,
bool SO >
940 struct IsStrictlyUpper< DMatSerialExpr<MT,SO> > :
public IsTrue< IsStrictlyUpper<MT>::value >
956 template<
typename MT >
957 struct DMatSerialExprTrait< DMatSerialExpr<MT,false> >
961 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value
962 , DMatSerialExpr<MT,false>
963 , INVALID_TYPE >::Type Type;
972 template<
typename MT >
973 struct TDMatSerialExprTrait< DMatSerialExpr<MT,true> >
977 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value
978 , DMatSerialExpr<MT,true>
979 , INVALID_TYPE >::Type Type;
988 template<
typename MT,
bool SO,
bool AF >
989 struct SubmatrixExprTrait< DMatSerialExpr<MT,SO>, AF >
993 typedef typename SerialExprTrait< typename SubmatrixExprTrait<const MT,AF>::Type >::Type Type;
1002 template<
typename MT,
bool SO >
1003 struct RowExprTrait< DMatSerialExpr<MT,SO> >
1007 typedef typename SerialExprTrait< typename RowExprTrait<const MT>::Type >::Type Type;
1016 template<
typename MT,
bool SO >
1017 struct ColumnExprTrait< DMatSerialExpr<MT,SO> >
1021 typedef typename SerialExprTrait< typename ColumnExprTrait<const MT>::Type >::Type Type;
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
MT::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: DMatSerialExpr.h:107
size_t columns() const
Returns the current number of columns of the matrix.
Definition: DMatSerialExpr.h:184
#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
#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:79
Header file for the ColumnExprTrait class template.
Header file for the IsColumnMajorMatrix type trait.
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::ResultType ResultType
Result type for expression template evaluations.
Definition: DMatSerialExpr.h:105
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: DMatSerialExpr.h:143
bool isAligned() const
Returns whether the operands of the expression are properly aligned in memory.
Definition: DMatSerialExpr.h:238
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
const ResultType CompositeType
Data type for composite expression templates.
Definition: DMatSerialExpr.h:112
Constraint on the data type.
size_t rows() const
Returns the current number of rows of the matrix.
Definition: DMatSerialExpr.h:174
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.
DMatSerialExpr< MT, SO > This
Type of this DMatSerialExpr instance.
Definition: DMatSerialExpr.h:104
Header file for the IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Expression object for the forced serial evaluation of dense matrices.The DMatSerialExpr class represe...
Definition: DMatSerialExpr.h:98
Header file for the DMatSerialExprTrait class template.
MT::ElementType ElementType
Resulting element type.
Definition: DMatSerialExpr.h:108
#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 DenseMatrix base class.
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: DMatSerialExpr.h:216
DMatSerialExpr(const MT &dm)
Constructor for the DMatSerialExpr class.
Definition: DMatSerialExpr.h:131
Header file for the IsLower type trait.
Header file for the IsAligned type trait.
Header file for the SerialExprTrait class template.
CompressedMatrix< Type, false > TransposeType
Transpose type for expression template evaluations.
Definition: CompressedMatrix.h:2585
Constraints on the storage order of matrix types.
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 IsDenseMatrix type trait.
Header file for the MatSerialExpr base class.
Header file for the IsStrictlyLower type trait.
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: DMatSerialExpr.h:248
Header file for the TDMatSerialExprTrait class template.
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: DMatSerialExpr.h:228
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::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatSerialExpr.h:106
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: DMatSerialExpr.h:158
MT::ReturnType ReturnType
Return type for expression template evaluations.
Definition: DMatSerialExpr.h:109
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type Operand
Composite data type of the dense matrix expression.
Definition: DMatSerialExpr.h:115
Header file for the IsRowMajorMatrix type trait.
Base class for all compute expression templates.The Computation class serves as a tag for all computa...
Definition: Computation.h:59
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.
Operand operand() const
Returns the dense matrix operand.
Definition: DMatSerialExpr.h:194
Header file for the IsUpper type trait.
Header file for exception macros.
Operand dm_
Dense matrix of the serial evaluation expression.
Definition: DMatSerialExpr.h:255
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
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.