35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATTSMATMULTEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATTSMATMULTEXPR_H_
117 template<
typename MT1
152 template<
typename T1,
typename T2,
typename T3 >
153 struct CanExploitSymmetry {
154 enum { value = ( IsRowMajorMatrix<T1>::value && IsSymmetric<T3>::value ) ||
155 ( IsColumnMajorMatrix<T1>::value && IsSymmetric<T2>::value ) };
166 template<
typename T1,
typename T2,
typename T3 >
167 struct IsEvaluationRequired {
168 enum { value = ( evaluateLeft || evaluateRight ) &&
169 !CanExploitSymmetry<T1,T2,T3>::value };
199 enum { vectorizable = 0 };
202 enum { smpAssignable = !evaluateLeft && MT1::smpAssignable &&
203 !evaluateRight && MT2::smpAssignable };
236 if(
lhs_.columns() == 0UL )
251 if( element != end ) {
252 tmp =
lhs_(i,element->index()) * element->value();
254 for( ; element!=
end; ++element ) {
255 tmp +=
lhs_(i,element->index()) * element->value();
278 :(
lhs_.columns() ) ) );
281 tmp =
lhs_(i,kbegin) *
rhs_(kbegin,j);
282 for(
size_t k=kbegin+1UL; k<kend; ++k ) {
308 return rhs_.columns();
338 template<
typename T >
340 return (
lhs_.isAliased( alias ) ||
rhs_.isAliased( alias ) );
350 template<
typename T >
352 return (
lhs_.isAliased( alias ) ||
rhs_.isAliased( alias ) );
362 return lhs_.isAligned();
395 template<
typename MT
412 DMatTSMatMultExpr::selectAssignKernel( ~lhs, A, B );
431 template<
typename MT3
434 static inline void selectAssignKernel( MT3& C,
const MT4& A,
const MT5& B )
438 const size_t block( 4UL );
440 for(
size_t ii=0UL; ii<C.rows(); ii+=block ) {
441 const size_t iend( ( ii+block > C.rows() )?( C.rows() ):( ii+block ) );
442 for(
size_t j=0UL; j<C.columns(); ++j )
451 for(
size_t i=ii; i<iend; ++i )
458 ConstIterator element(
begin );
460 C(i,j) = A(i,element->index()) * element->value();
462 for( ; element!=
end; ++element )
463 C(i,j) += A(i,element->index()) * element->value();
484 template<
typename MT
486 friend inline typename DisableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
491 typedef typename SelectType< SO, OppositeType, ResultType >::Type TmpType;
503 const TmpType tmp(
serial( rhs ) );
524 template<
typename MT >
525 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
553 template<
typename MT >
554 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
582 template<
typename MT
584 friend inline typename DisableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
592 LT A(
serial( rhs.lhs_ ) );
593 RT B(
serial( rhs.rhs_ ) );
599 DMatTSMatMultExpr::selectAddAssignKernel( ~lhs, A, B );
618 template<
typename MT3
621 static inline void selectAddAssignKernel( MT3& C,
const MT4& A,
const MT5& B )
625 const size_t block( 4UL );
627 for(
size_t ii=0UL; ii<C.rows(); ii+=block ) {
628 const size_t iend( ( ii+block > C.rows() )?( C.rows() ):( ii+block ) );
629 for(
size_t j=0UL; j<C.columns(); ++j )
631 const ConstIterator
begin( ( IsUpper<MT4>::value )
632 ?( IsStrictlyUpper<MT4>::value ? B.upperBound(ii,j) : B.lowerBound(ii,j) )
634 const ConstIterator
end( ( IsLower<MT4>::value )
635 ?( IsStrictlyLower<MT4>::value ? B.lowerBound(ii+block,j) : B.upperBound(ii+block,j) )
641 for(
size_t i=ii; i<iend; ++i ) {
642 for( ConstIterator element=
begin; element!=
end; ++element )
643 C(i,j) += A(i,element->index()) * element->value();
666 template<
typename MT >
667 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
695 template<
typename MT >
696 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
728 template<
typename MT
737 LT A(
serial( rhs.lhs_ ) );
738 RT B(
serial( rhs.rhs_ ) );
744 DMatTSMatMultExpr::selectSubAssignKernel( ~lhs, A, B );
763 template<
typename MT3
766 static inline void selectSubAssignKernel( MT3& C,
const MT4& A,
const MT5& B )
770 const size_t block( 4UL );
772 for(
size_t ii=0UL; ii<C.rows(); ii+=block ) {
773 const size_t iend( ( ii+block > C.rows() )?( C.rows() ):( ii+block ) );
774 for(
size_t j=0UL; j<C.columns(); ++j )
776 const ConstIterator
begin( ( IsUpper<MT4>::value )
777 ?( IsStrictlyUpper<MT4>::value ? B.upperBound(ii,j) : B.lowerBound(ii,j) )
779 const ConstIterator
end( ( IsLower<MT4>::value )
780 ?( IsStrictlyLower<MT4>::value ? B.lowerBound(ii+block,j) : B.upperBound(ii+block,j) )
786 for(
size_t i=ii; i<iend; ++i ) {
787 for( ConstIterator element=
begin; element!=
end; ++element )
788 C(i,j) -= A(i,element->index()) * element->value();
811 template<
typename MT >
812 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
840 template<
typename MT >
841 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
883 template<
typename MT
885 friend inline typename EnableIf< IsEvaluationRequired<MT,MT1,MT2> >::Type
920 template<
typename MT
922 friend inline typename EnableIf< IsEvaluationRequired<MT,MT1,MT2> >::Type
927 typedef typename SelectType< SO, OppositeType, ResultType >::Type TmpType;
939 const TmpType tmp( rhs );
960 template<
typename MT >
961 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
989 template<
typename MT >
990 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
1021 template<
typename MT
1023 friend inline typename EnableIf< IsEvaluationRequired<MT,MT1,MT2> >::Type
1058 template<
typename MT >
1059 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
1087 template<
typename MT >
1088 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
1123 template<
typename MT
1125 friend inline typename EnableIf< IsEvaluationRequired<MT,MT1,MT2> >::Type
1160 template<
typename MT >
1161 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
1189 template<
typename MT >
1190 friend inline typename EnableIf< CanExploitSymmetry<MT,MT1,MT2> >::Type
1268 template<
typename T1
1270 inline const DMatTSMatMultExpr<T1,T2>
1276 throw std::invalid_argument(
"Matrix sizes do not match" );
1293 template<
typename MT1,
typename MT2 >
1311 template<
typename MT1,
typename MT2 >
1313 :
public Columns<MT2>
1329 template<
typename MT1,
typename MT2 >
1331 :
public IsTrue< IsLower<MT1>::value && IsLower<MT2>::value >
1347 template<
typename MT1,
typename MT2 >
1349 :
public IsTrue< IsUniLower<MT1>::value && IsUniLower<MT2>::value >
1365 template<
typename MT1,
typename MT2 >
1367 :
public IsTrue< Or< And< IsStrictlyLower<MT1>, IsLower<MT2> >
1368 , And< IsStrictlyLower<MT2>, IsLower<MT1> > >::value >
1384 template<
typename MT1,
typename MT2 >
1386 :
public IsTrue< IsUpper<MT1>::value && IsUpper<MT2>::value >
1402 template<
typename MT1,
typename MT2 >
1404 :
public IsTrue< IsUniUpper<MT1>::value && IsUniUpper<MT2>::value >
1420 template<
typename MT1,
typename MT2 >
1422 :
public IsTrue< Or< And< IsStrictlyUpper<MT1>, IsUpper<MT2> >
1423 , And< IsStrictlyUpper<MT2>, IsUpper<MT1> > >::value >
1439 template<
typename MT1,
typename MT2,
typename VT >
1444 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1445 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1446 IsDenseVector<VT>::value && IsColumnVector<VT>::value
1447 ,
typename DMatDVecMultExprTrait< MT1, typename TSMatDVecMultExprTrait<MT2,VT>::Type >::Type
1448 , INVALID_TYPE >::Type Type;
1457 template<
typename MT1,
typename MT2,
typename VT >
1462 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1463 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1464 IsSparseVector<VT>::value && IsColumnVector<VT>::value
1465 ,
typename DMatSVecMultExprTrait< MT1, typename TSMatSVecMultExprTrait<MT2,VT>::Type >::Type
1466 , INVALID_TYPE >::Type Type;
1475 template<
typename VT,
typename MT1,
typename MT2 >
1480 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1481 IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1482 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value
1483 ,
typename TDVecTSMatMultExprTrait< typename TDVecDMatMultExprTrait<VT,MT1>::Type, MT2 >::Type
1484 , INVALID_TYPE >::Type Type;
1493 template<
typename VT,
typename MT1,
typename MT2 >
1498 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
1499 IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1500 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value
1501 ,
typename TDVecTSMatMultExprTrait< typename TSVecDMatMultExprTrait<VT,MT1>::Type, MT2 >::Type
1502 , INVALID_TYPE >::Type Type;
1511 template<
typename MT1,
typename MT2,
bool AF >
1516 typedef typename MultExprTrait< typename SubmatrixExprTrait<const MT1,AF>::Type
1517 ,
typename SubmatrixExprTrait<const MT2,AF>::Type >::Type Type;
1526 template<
typename MT1,
typename MT2 >
1531 typedef typename MultExprTrait< typename RowExprTrait<const MT1>::Type, MT2 >::Type Type;
1540 template<
typename MT1,
typename MT2 >
1545 typedef typename MultExprTrait< MT1, typename ColumnExprTrait<const MT2>::Type >::Type Type;
ResultType::ElementType ElementType
Resulting element type.
Definition: DMatTSMatMultExpr.h:180
const MT::ElementType max(const DenseMatrix< MT, SO > &dm)
Returns the largest element of the dense matrix.
Definition: DenseMatrix.h:1649
Compile time check whether the given type is a computational expression template.This type trait clas...
Definition: IsComputation.h:89
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: DMatTSMatMultExpr.h:227
Header file for the Rows type trait.
Header file for the IsUniUpper type trait.
const DMatDMatMultExpr< T1, T2 > operator*(const DenseMatrix< T1, false > &lhs, const DenseMatrix< T2, false > &rhs)
Multiplication operator for the multiplication of two row-major dense matrices ( ).
Definition: DMatDMatMultExpr.h:8247
SelectType< IsExpression< MT1 >::value, const MT1, const MT1 & >::Type LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: DMatTSMatMultExpr.h:185
Compile time check for triangular matrix types.This type trait tests whether or not the given templat...
Definition: IsTriangular.h:105
Header file for basic type definitions.
MT2::CompositeType CT2
Composite type of the right-hand side sparse matrix expression.
Definition: DMatTSMatMultExpr.h:130
const size_t SMP_DMATTSMATMULT_THRESHOLD
SMP row-major dense matrix/column-major sparse matrix multiplication threshold.This threshold specifi...
Definition: Thresholds.h:949
BLAZE_ALWAYS_INLINE MT::Iterator end(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator just past the last element of row/column i.
Definition: Matrix.h:258
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DMatTSMatMultExpr.h:339
Header file for the IsSparseMatrix type trait.
Efficient implementation of a compressed matrix.The CompressedMatrix class template is the represent...
Definition: CompressedMatrix.h:209
#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.
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:821
ResultType::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: DMatTSMatMultExpr.h:179
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2507
Header file for the IsRowVector type trait.
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:261
Header file for the And class template.
Compile time check for lower triangular matrices.This type trait tests whether or not the given templ...
Definition: IsLower.h:90
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:699
Header file for the Computation base class.
Header file for the MatMatMultExpr base class.
Compile time check for upper triangular matrices.This type trait tests whether or not the given templ...
Definition: IsUpper.h:90
Header file for the RequiresEvaluation type trait.
LeftOperand leftOperand() const
Returns the left-hand side dense matrix operand.
Definition: DMatTSMatMultExpr.h:317
Header file for the IsUniLower type trait.
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:107
Constraint on the data type.
const ResultType CompositeType
Data type for composite expression templates.
Definition: DMatTSMatMultExpr.h:182
Constraint on the data type.
Constraint on the data type.
Header file for the MultExprTrait class template.
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:90
bool isAligned() const
Returns whether the operands of the expression are properly aligned in memory.
Definition: DMatTSMatMultExpr.h:361
DMatTSMatMultExpr(const MT1 &lhs, const MT2 &rhs)
Constructor for the DMatTSMatMultExpr class.
Definition: DMatTSMatMultExpr.h:212
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 DisableIf class template.
Header file for the multiplication trait.
Header file for the IsStrictlyUpper type trait.
Header file for the IsSymmetric type trait.
size_t rows() const
Returns the current number of rows of the matrix.
Definition: DMatTSMatMultExpr.h:297
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
#define BLAZE_CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a column-major dense or sparse matri...
Definition: StorageOrder.h:161
MT1::CompositeType CT1
Composite type of the left-hand side dense matrix expression.
Definition: DMatTSMatMultExpr.h:129
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2511
Header file for the Or class template.
Header file for the TDVecTSMatMultExprTrait class template.
const MT::ElementType min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1602
Header file for the DenseMatrix base class.
BLAZE_ALWAYS_INLINE 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:635
Header file for the Columns type trait.
Header file for the TSMatDVecMultExprTrait class template.
RT2::ElementType ET2
Element type of the right-hand side sparse matrix expression.
Definition: DMatTSMatMultExpr.h:128
SelectType< evaluateLeft, const RT1, CT1 >::Type LT
Type for the assignment of the left-hand side dense matrix operand.
Definition: DMatTSMatMultExpr.h:191
Header file for the DMatDVecMultExprTrait class template.
MT1::ResultType RT1
Result type of the left-hand side dense matrix expression.
Definition: DMatTSMatMultExpr.h:125
Header file for the IsLower type trait.
ResultType::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatTSMatMultExpr.h:178
#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
Header file for the IsTriangular type trait.
Constraints on the storage order of matrix types.
RT1::ElementType ET1
Element type of the left-hand side dense matrix expression.
Definition: DMatTSMatMultExpr.h:127
BLAZE_ALWAYS_INLINE MT::Iterator begin(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator to the first element of row/column i.
Definition: Matrix.h:195
Compile time check for strictly upper triangular matrices.This type trait tests whether or not the gi...
Definition: IsStrictlyUpper.h:86
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2505
RightOperand rhs_
Right-hand side sparse matrix of the multiplication expression.
Definition: DMatTSMatMultExpr.h:379
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 EnableIf class template.
Header file for the IsStrictlyLower type trait.
Header file for the serial shim.
#define BLAZE_CONSTRAINT_MUST_FORM_VALID_MATMATMULTEXPR(T1, T2)
Constraint on the data type.In case the given data types T1 and T2 do not form a valid matrix/matrix ...
Definition: MatMatMultExpr.h:165
Base class for all matrix/matrix multiplication expression templates.The MatMatMultExpr class serves ...
Definition: MatMatMultExpr.h:65
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 IsSparseVector type trait.
#define BLAZE_CONSTRAINT_MUST_NOT_BE_SYMMETRIC_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a symmetric matrix type, a compilation error is created.
Definition: Symmetric.h:116
Header file for the SubmatrixExprTrait class template.
#define BLAZE_CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a row-major dense or sparse matrix t...
Definition: StorageOrder.h:81
Removal of reference modifiers.The RemoveCV type trait removes any reference modifiers from the given...
Definition: RemoveReference.h:69
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.
Base template for the MultTrait class.
Definition: MultTrait.h:150
const ElementType ReturnType
Return type for expression template evaluations.
Definition: DMatTSMatMultExpr.h:181
MultTrait< RT1, RT2 >::Type ResultType
Result type for expression template evaluations.
Definition: DMatTSMatMultExpr.h:177
BLAZE_ALWAYS_INLINE 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:742
RightOperand rightOperand() const
Returns the right-hand side transpose sparse matrix operand.
Definition: DMatTSMatMultExpr.h:327
Header file for the reset shim.
SelectType< evaluateRight, const RT2, CT2 >::Type RT
Type for the assignment of the right-hand side sparse matrix operand.
Definition: DMatTSMatMultExpr.h:194
Expression object for dense matrix-transpose sparse matrix multiplications.The DMatTSMatMultExpr clas...
Definition: DMatTSMatMultExpr.h:119
Header file for the RemoveReference type trait.
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: DMatTSMatMultExpr.h:351
Substitution Failure Is Not An Error (SFINAE) class.The DisableIf class template is an auxiliary tool...
Definition: DisableIf.h:184
#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 IsDenseVector type trait.
Compile time check for strictly lower triangular matrices.This type trait tests whether or not the gi...
Definition: IsStrictlyLower.h:86
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: DMatTSMatMultExpr.h:371
LeftOperand lhs_
Left-hand side dense matrix of the multiplication expression.
Definition: DMatTSMatMultExpr.h:378
Header file for the IsRowMajorMatrix type trait.
const DMatTransExpr< MT,!SO > trans(const DenseMatrix< MT, SO > &dm)
Calculation of the transpose of the given dense matrix.
Definition: DMatTransExpr.h:937
Header file for the IsComputation type trait class.
Base class for all compute expression templates.The Computation class serves as a tag for all computa...
Definition: Computation.h:59
Header file for the TDVecDMatMultExprTrait class template.
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:2502
Header file for the IsTrue value trait.
Header file for the TSVecDMatMultExprTrait class template.
size_t columns() const
Returns the current number of columns of the matrix.
Definition: DMatTSMatMultExpr.h:307
Header file for the IsUpper type trait.
MT2::ResultType RT2
Result type of the right-hand side sparse matrix expression.
Definition: DMatTSMatMultExpr.h:126
Header file for the DMatSVecMultExprTrait class template.
Header file for the IsColumnVector type trait.
Constraint on the data type.
Header file for the thresholds for matrix/vector and matrix/matrix multiplications.
#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
DMatTSMatMultExpr< MT1, MT2 > This
Type of this DMatTSMatMultExpr instance.
Definition: DMatTSMatMultExpr.h:176
#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
SelectType< IsExpression< MT2 >::value, const MT2, const MT2 & >::Type RightOperand
Composite type of the right-hand side sparse matrix expression.
Definition: DMatTSMatMultExpr.h:188
Header file for the IsExpression type trait class.
Header file for the TSMatSVecMultExprTrait class template.
Header file for the FunctionTrace class.
BLAZE_ALWAYS_INLINE 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:849