35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSMATSUBEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATSMATSUBEXPR_H_
85 template<
typename MT1
136 enum { vectorizable = 0 };
184 return lhs_.columns();
214 template<
typename T >
217 (
rhs_.canAlias( alias ) );
227 template<
typename T >
229 return (
lhs_.isAliased( alias ) ||
rhs_.isAliased( alias ) );
251 template<
typename MT
283 template<
typename MT
301 const TmpType tmp( rhs );
319 template<
typename MT
350 template<
typename MT
425 template<
typename T1
428 inline const DMatSMatSubExpr<T1,T2,SO>
434 throw std::invalid_argument(
"Matrix sizes do not match" );
462 template<
typename T1
467 inline const typename AddExprTrait< DMatSMatSubExpr<T1,T2,SO1>, T3 >::Type
468 operator+(
const DMatSMatSubExpr<T1,T2,SO1>& lhs,
const DenseMatrix<T3,SO2>& rhs )
472 return ( lhs.leftOperand() + (~rhs) ) - lhs.rightOperand();
491 template<
typename T1
496 inline const typename SubExprTrait< DMatSMatSubExpr<T1,T2,SO1>, T3 >::Type
497 operator-(
const DMatSMatSubExpr<T1,T2,SO1>& lhs,
const DenseMatrix<T3,SO2>& rhs )
501 return ( lhs.leftOperand() - (~rhs) ) - lhs.rightOperand();
517 template<
typename MT1,
typename MT2,
typename MT3 >
518 struct DMatDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
523 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
524 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
525 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
526 ,
typename DMatSMatSubExprTrait< typename DMatDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
527 , INVALID_TYPE >::Type Type;
537 template<
typename MT1,
typename MT2,
typename MT3 >
538 struct DMatTDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
543 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
544 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
545 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
546 ,
typename DMatSMatSubExprTrait< typename DMatTDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
547 , INVALID_TYPE >::Type Type;
557 template<
typename MT1,
typename MT2,
typename MT3 >
558 struct TDMatDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
563 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
564 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
565 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
566 ,
typename DMatTSMatSubExprTrait< typename TDMatDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
567 , INVALID_TYPE >::Type Type;
577 template<
typename MT1,
typename MT2,
typename MT3 >
578 struct TDMatTDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
583 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
584 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
585 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
586 ,
typename TDMatTSMatSubExprTrait< typename TDMatTDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
587 , INVALID_TYPE >::Type Type;
597 template<
typename MT1,
typename MT2,
typename MT3 >
598 struct DMatDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
603 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
604 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
605 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
606 ,
typename DMatSMatSubExprTrait< typename DMatDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
607 , INVALID_TYPE >::Type Type;
617 template<
typename MT1,
typename MT2,
typename MT3 >
618 struct DMatTDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
623 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
624 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
625 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
626 ,
typename DMatSMatSubExprTrait< typename DMatTDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
627 , INVALID_TYPE >::Type Type;
637 template<
typename MT1,
typename MT2,
typename MT3 >
638 struct TDMatDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
643 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
644 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
645 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
646 ,
typename DMatTSMatSubExprTrait< typename TDMatDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
647 , INVALID_TYPE >::Type Type;
657 template<
typename MT1,
typename MT2,
typename MT3 >
658 struct TDMatTDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
663 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
664 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
665 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
666 ,
typename TDMatTSMatSubExprTrait< typename TDMatTDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
667 , INVALID_TYPE >::Type Type;
677 template<
typename MT1,
typename MT2,
bool SO >
678 struct SubmatrixExprTrait< DMatSMatSubExpr<MT1,MT2,SO> >
682 typedef typename SubExprTrait< typename SubmatrixExprTrait<const MT1>::Type
683 ,
typename SubmatrixExprTrait<const MT2>::Type >::Type Type;
692 template<
typename MT1,
typename MT2,
bool SO >
693 struct RowExprTrait< DMatSMatSubExpr<MT1,MT2,SO> >
697 typedef typename SubExprTrait< typename RowExprTrait<const MT1>::Type
698 ,
typename RowExprTrait<const MT2>::Type >::Type Type;
707 template<
typename MT1,
typename MT2,
bool SO >
708 struct ColumnExprTrait< DMatSMatSubExpr<MT1,MT2,SO> >
712 typedef typename SubExprTrait< typename ColumnExprTrait<const MT1>::Type
713 ,
typename ColumnExprTrait<const MT2>::Type >::Type Type;
RightOperand rhs_
Right-hand side sparse matrix of the subtraction expression.
Definition: DMatSMatSubExpr.h:236
MT2::ReturnType RN2
Return type of the right-hand side sparse matrix expression.
Definition: DMatSMatSubExpr.h:97
Compile time check whether the given type is a temporary vector or matrix type.This type trait class ...
Definition: IsTemporary.h:87
Header file for the subtraction trait.
SubTrait< RT1, RT2 >::Type ResultType
Result type for expression template evaluations.
Definition: DMatSMatSubExpr.h:116
Header file for the IsSparseMatrix type trait.
ResultType::ElementType ElementType
Resulting element type.
Definition: DMatSMatSubExpr.h:119
#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:242
Efficient implementation of a compressed matrix.The CompressedMatrix class template is the represent...
Definition: CompressedMatrix.h:196
#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.
MT2::ResultType RT2
Result type of the right-hand side sparse matrix expression.
Definition: DMatSMatSubExpr.h:95
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2375
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:248
Header file for the AddExprTrait class template.
Header file for the Computation base class.
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DMatSMatSubExpr.h:215
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:104
Constraint on the data type.
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: DMatSMatSubExpr.h:161
Constraint on the data type.
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 IsTemporary type trait class.
LeftOperand lhs_
Left-hand side dense matrix of the subtraction expression.
Definition: DMatSMatSubExpr.h:235
Base class for all matrix/matrix subtraction expression templates.The MatMatSubExpr class serves as a...
Definition: MatMatSubExpr.h:65
DMatSMatSubExpr(const MT1 &lhs, const MT2 &rhs)
Constructor for the DMatSMatSubExpr class.
Definition: DMatSMatSubExpr.h:145
Header file for the DenseMatrix base class.
void assign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the assignment of a matrix to a matrix.
Definition: Matrix.h:179
Header file for the MatMatSubExpr base class.
const DenseIterator< Type > operator+(const DenseIterator< Type > &it, ptrdiff_t inc)
Addition between a DenseIterator and an integral value.
Definition: DenseIterator.h:556
const ResultType CompositeType
Data type for composite expression templates.
Definition: DMatSMatSubExpr.h:125
size_t columns() const
Returns the current number of columns of the matrix.
Definition: DMatSMatSubExpr.h:183
#define BLAZE_CONSTRAINT_MUST_BE_REFERENCE_TYPE(T)
Constraint on the data type.In case the given data type T is not a reference type, a compilation error is created.
Definition: Reference.h:78
Constraints on the storage order of matrix types.
Evaluation of the return type of a subtraction expression.Via this type trait it is possible to evalu...
Definition: SubExprTrait.h:103
MT1::ReturnType RN1
Return type of the left-hand side dense matrix expression.
Definition: DMatSMatSubExpr.h:96
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.
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: DMatSMatSubExpr.h:228
SelectType< IsExpression< MT2 >::value, const MT2, const MT2 & >::Type RightOperand
Composite type of the right-hand side sparse matrix expression.
Definition: DMatSMatSubExpr.h:131
Header file for the SubmatrixExprTrait class template.
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2374
ResultType::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatSMatSubExpr.h:117
DMatSMatSubExpr< MT1, MT2, SO > This
Type of this DMatSMatSubExpr instance.
Definition: DMatSMatSubExpr.h:115
Header file for run time assertion macros.
Expression object for dense matrix-sparse matrix subtractions.The DMatSMatSubExpr class represents th...
Definition: DMatSMatSubExpr.h:88
void addAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the addition assignment of a matrix to a matrix.
Definition: Matrix.h:209
const DenseIterator< Type > operator-(const DenseIterator< Type > &it, ptrdiff_t inc)
Subtraction between a DenseIterator and an integral value.
Definition: DenseIterator.h:585
void subAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the subtraction assignment of a matrix to matrix.
Definition: Matrix.h:239
ResultType::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: DMatSMatSubExpr.h:118
SubExprTrait< RN1, RN2 >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: DMatSMatSubExpr.h:110
RightOperand rightOperand() const
Returns the right-hand side dense matrix operand.
Definition: DMatSMatSubExpr.h:203
MT1::ResultType RT1
Result type of the left-hand side dense matrix expression.
Definition: DMatSMatSubExpr.h:94
SelectType< IsExpression< MT1 >::value, const MT1, const MT1 & >::Type LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: DMatSMatSubExpr.h:128
LeftOperand leftOperand() const
Returns the left-hand side dense matrix operand.
Definition: DMatSMatSubExpr.h:193
#define BLAZE_CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER(T1, T2)
Constraint on the data type.In case either of the two given data types T1 or T2 is not a matrix type ...
Definition: StorageOrder.h:283
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
#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:2370
size_t columns(const Matrix< MT, SO > &m)
Returns the current number of columns of the matrix.
Definition: Matrix.h:154
Header file for basic type definitions.
Base template for the SubTrait class.
Definition: SubTrait.h:141
Header file for the SubExprTrait class template.
const SelectType< returnExpr, ExprReturnType, ElementType >::Type ReturnType
Return type for expression template evaluations.
Definition: DMatSMatSubExpr.h:122
size_t rows(const Matrix< MT, SO > &m)
Returns the current number of rows of the matrix.
Definition: Matrix.h:138
#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
#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
Compile time check whether the given type is an expression template.This type trait class tests wheth...
Definition: IsExpression.h:87
size_t rows() const
Returns the current number of rows of the matrix.
Definition: DMatSMatSubExpr.h:173
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.