All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SMatDMatSubExpr.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATDMATSUBEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_SMATDMATSUBEXPR_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
43 #include <stdexcept>
63 #include <blaze/util/Assert.h>
66 #include <blaze/util/SelectType.h>
67 #include <blaze/util/Types.h>
68 
69 
70 namespace blaze {
71 
72 //=================================================================================================
73 //
74 // CLASS SMATDMATSUBEXPR
75 //
76 //=================================================================================================
77 
78 //*************************************************************************************************
85 template< typename MT1 // Type of the left-hand side sparse matrix
86  , typename MT2 // Type of the right-hand side dense matrix
87  , bool SO > // Storage order
88 class SMatDMatSubExpr : public DenseMatrix< SMatDMatSubExpr<MT1,MT2,SO>, SO >
89  , private MatMatSubExpr
90  , private Computation
91 {
92  private:
93  //**Type definitions****************************************************************************
94  typedef typename MT1::ResultType RT1;
95  typedef typename MT2::ResultType RT2;
96  typedef typename MT1::ReturnType RN1;
97  typedef typename MT2::ReturnType RN2;
98  //**********************************************************************************************
99 
100  //**Return type evaluation**********************************************************************
102 
107  enum { returnExpr = !IsTemporary<RN1>::value && !IsTemporary<RN2>::value };
108 
111  //**********************************************************************************************
112 
113  public:
114  //**Type definitions****************************************************************************
120 
123 
125  typedef const ResultType CompositeType;
126 
128  typedef typename SelectType< IsExpression<MT1>::value, const MT1, const MT1& >::Type LeftOperand;
129 
131  typedef typename SelectType< IsExpression<MT2>::value, const MT2, const MT2& >::Type RightOperand;
132  //**********************************************************************************************
133 
134  //**Compilation flags***************************************************************************
136  enum { vectorizable = 0 };
137  //**********************************************************************************************
138 
139  //**Constructor*********************************************************************************
145  explicit inline SMatDMatSubExpr( const MT1& lhs, const MT2& rhs )
146  : lhs_( lhs ) // Left-hand side sparse matrix of the subtraction expression
147  , rhs_( rhs ) // Right-hand side dense matrix of the subtraction expression
148  {
149  BLAZE_INTERNAL_ASSERT( lhs.rows() == rhs.rows() , "Invalid number of rows" );
150  BLAZE_INTERNAL_ASSERT( lhs.columns() == rhs.columns(), "Invalid number of columns" );
151  }
152  //**********************************************************************************************
153 
154  //**Access operator*****************************************************************************
161  inline ReturnType operator()( size_t i, size_t j ) const {
162  BLAZE_INTERNAL_ASSERT( i < lhs_.rows() , "Invalid row access index" );
163  BLAZE_INTERNAL_ASSERT( j < lhs_.columns(), "Invalid column access index" );
164  return lhs_(i,j) - rhs_(i,j);
165  }
166  //**********************************************************************************************
167 
168  //**Rows function*******************************************************************************
173  inline size_t rows() const {
174  return lhs_.rows();
175  }
176  //**********************************************************************************************
177 
178  //**Columns function****************************************************************************
183  inline size_t columns() const {
184  return lhs_.columns();
185  }
186  //**********************************************************************************************
187 
188  //**Left operand access*************************************************************************
193  inline LeftOperand leftOperand() const {
194  return lhs_;
195  }
196  //**********************************************************************************************
197 
198  //**Right operand access************************************************************************
203  inline RightOperand rightOperand() const {
204  return rhs_;
205  }
206  //**********************************************************************************************
207 
208  //**********************************************************************************************
214  template< typename T >
215  inline bool canAlias( const T* alias ) const {
216  return ( lhs_.canAlias( alias ) ) ||
217  ( IsExpression<MT2>::value && rhs_.canAlias( alias ) );
218  }
219  //**********************************************************************************************
220 
221  //**********************************************************************************************
227  template< typename T >
228  inline bool isAliased( const T* alias ) const {
229  return lhs_.isAliased( alias ) || rhs_.isAliased( alias );
230  }
231  //**********************************************************************************************
232 
233  private:
234  //**Member variables****************************************************************************
237  //**********************************************************************************************
238 
239  //**Assignment to dense matrices****************************************************************
251  template< typename MT // Type of the target dense matrix
252  , bool SO2 > // Storage order of the target dense matrix
253  friend inline void assign( DenseMatrix<MT,SO2>& lhs, const SMatDMatSubExpr& rhs )
254  {
256 
257  BLAZE_INTERNAL_ASSERT( (~lhs).rows() == rhs.rows() , "Invalid number of rows" );
258  BLAZE_INTERNAL_ASSERT( (~lhs).columns() == rhs.columns(), "Invalid number of columns" );
259 
260  assign ( ~lhs, -rhs.rhs_ );
261  addAssign( ~lhs, rhs.lhs_ );
262  }
264  //**********************************************************************************************
265 
266  //**Assignment to sparse matrices***************************************************************
278  template< typename MT // Type of the target sparse matrix
279  , bool SO2 > // Storage order of the target sparse matrix
280  friend inline void assign( SparseMatrix<MT,SO2>& lhs, const SMatDMatSubExpr& rhs )
281  {
283 
285 
292 
293  BLAZE_INTERNAL_ASSERT( (~lhs).rows() == rhs.rows() , "Invalid number of rows" );
294  BLAZE_INTERNAL_ASSERT( (~lhs).columns() == rhs.columns(), "Invalid number of columns" );
295 
296  const TmpType tmp( rhs );
297  assign( ~lhs, tmp );
298  }
300  //**********************************************************************************************
301 
302  //**Addition assignment to dense matrices*******************************************************
314  template< typename MT // Type of the target dense matrix
315  , bool SO2 > // Storage order of the target dense matrix
316  friend inline void addAssign( DenseMatrix<MT,SO2>& lhs, const SMatDMatSubExpr& rhs )
317  {
319 
320  BLAZE_INTERNAL_ASSERT( (~lhs).rows() == rhs.rows() , "Invalid number of rows" );
321  BLAZE_INTERNAL_ASSERT( (~lhs).columns() == rhs.columns(), "Invalid number of columns" );
322 
323  subAssign( ~lhs, rhs.rhs_ );
324  addAssign( ~lhs, rhs.lhs_ );
325  }
327  //**********************************************************************************************
328 
329  //**Addition assignment to sparse matrices******************************************************
330  // No special implementation for the addition assignment to sparse matrices.
331  //**********************************************************************************************
332 
333  //**Subtraction assignment to dense matrices****************************************************
345  template< typename MT // Type of the target dense matrix
346  , bool SO2 > // Storage order of the target dense matrix
347  friend inline void subAssign( DenseMatrix<MT,SO2>& lhs, const SMatDMatSubExpr& rhs )
348  {
350 
351  BLAZE_INTERNAL_ASSERT( (~lhs).rows() == rhs.rows() , "Invalid number of rows" );
352  BLAZE_INTERNAL_ASSERT( (~lhs).columns() == rhs.columns(), "Invalid number of columns" );
353 
354  addAssign( ~lhs, rhs.rhs_ );
355  subAssign( ~lhs, rhs.lhs_ );
356  }
358  //**********************************************************************************************
359 
360  //**Subtraction assignment to sparse matrices***************************************************
361  // No special implementation for the subtraction assignment to sparse matrices.
362  //**********************************************************************************************
363 
364  //**Multiplication assignment to dense matrices*************************************************
365  // No special implementation for the multiplication assignment to dense matrices.
366  //**********************************************************************************************
367 
368  //**Multiplication assignment to sparse matrices************************************************
369  // No special implementation for the multiplication assignment to sparse matrices.
370  //**********************************************************************************************
371 
372  //**Compile time checks*************************************************************************
378  //**********************************************************************************************
379 };
380 //*************************************************************************************************
381 
382 
383 
384 
385 //=================================================================================================
386 //
387 // GLOBAL BINARY ARITHMETIC OPERATORS
388 //
389 //=================================================================================================
390 
391 //*************************************************************************************************
420 template< typename T1 // Type of the left-hand side sparse matrix
421  , typename T2 // Type of the right-hand side dense matrix
422  , bool SO > // Storage order
423 inline const SMatDMatSubExpr<T1,T2,SO>
425 {
427 
428  if( (~lhs).rows() != (~rhs).rows() || (~lhs).columns() != (~rhs).columns() )
429  throw std::invalid_argument( "Matrix sizes do not match" );
430 
431  return SMatDMatSubExpr<T1,T2,SO>( ~lhs, ~rhs );
432 }
433 //*************************************************************************************************
434 
435 
436 
437 
438 //=================================================================================================
439 //
440 // GLOBAL RESTRUCTURING BINARY ARITHMETIC OPERATORS
441 //
442 //=================================================================================================
443 
444 //*************************************************************************************************
457 template< typename T1 // Type of the sparse matrix of the left-hand side expression
458  , typename T2 // Type of the dense matrix of the left-hand side expression
459  , bool SO1 // Storage order of the left-hand side expression
460  , typename T3 // Type of the right-hand side dense matrix
461  , bool SO2 > // Storage order of the right-hand side dense matrix
462 inline const typename AddExprTrait< SMatDMatSubExpr<T1,T2,SO1>, T3 >::Type
463  operator+( const SMatDMatSubExpr<T1,T2,SO1>& lhs, const DenseMatrix<T3,SO2>& rhs )
464 {
466 
467  return ( (~rhs) - lhs.rightOperand() ) + lhs.leftOperand();
468 }
470 //*************************************************************************************************
471 
472 
473 //*************************************************************************************************
486 template< typename T1 // Type of the sparse matrix of the left-hand side expression
487  , typename T2 // Type of the dense matrix of the left-hand side expression
488  , bool SO1 // Storage order of the left-hand side expression
489  , typename T3 // Type of the right-hand side dense matrix
490  , bool SO2 > // Storage order of the right-hand side dense matrix
491 inline const typename SubExprTrait< SMatDMatSubExpr<T1,T2,SO1>, T3 >::Type
492  operator-( const SMatDMatSubExpr<T1,T2,SO1>& lhs, const DenseMatrix<T3,SO2>& rhs )
493 {
495 
496  return lhs.leftOperand() - ( lhs.rightOperand() + (~rhs) );
497 }
499 //*************************************************************************************************
500 
501 
502 
503 
504 //=================================================================================================
505 //
506 // EXPRESSION TRAIT SPECIALIZATIONS
507 //
508 //=================================================================================================
509 
510 //*************************************************************************************************
512 template< typename MT1, typename MT2, typename MT3 >
513 struct DMatDMatAddExprTrait< SMatDMatSubExpr<MT1,MT2,false>, MT3 >
514 {
515  public:
516  //**********************************************************************************************
518  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
519  IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
520  IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
521  , typename DMatSMatAddExprTrait< typename DMatDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
522  , INVALID_TYPE >::Type Type;
524  //**********************************************************************************************
525 };
527 //*************************************************************************************************
528 
529 
530 //*************************************************************************************************
532 template< typename MT1, typename MT2, typename MT3 >
533 struct DMatTDMatAddExprTrait< SMatDMatSubExpr<MT1,MT2,false>, MT3 >
534 {
535  public:
536  //**********************************************************************************************
538  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
539  IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
540  IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
541  , typename DMatSMatAddExprTrait< typename TDMatDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
542  , INVALID_TYPE >::Type Type;
544  //**********************************************************************************************
545 };
547 //*************************************************************************************************
548 
549 
550 //*************************************************************************************************
552 template< typename MT1, typename MT2, typename MT3 >
553 struct TDMatDMatAddExprTrait< SMatDMatSubExpr<MT1,MT2,true>, MT3 >
554 {
555  public:
556  //**********************************************************************************************
558  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
559  IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
560  IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
561  , typename DMatTSMatAddExprTrait< typename DMatTDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
562  , INVALID_TYPE >::Type Type;
564  //**********************************************************************************************
565 };
567 //*************************************************************************************************
568 
569 
570 //*************************************************************************************************
572 template< typename MT1, typename MT2, typename MT3 >
573 struct TDMatTDMatAddExprTrait< SMatDMatSubExpr<MT1,MT2,true>, MT3 >
574 {
575  public:
576  //**********************************************************************************************
578  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
579  IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
580  IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
581  , typename TDMatTSMatAddExprTrait< typename TDMatTDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
582  , INVALID_TYPE >::Type Type;
584  //**********************************************************************************************
585 };
587 //*************************************************************************************************
588 
589 
590 //*************************************************************************************************
592 template< typename MT1, typename MT2, typename MT3 >
593 struct DMatDMatSubExprTrait< SMatDMatSubExpr<MT1,MT2,false>, MT3 >
594 {
595  public:
596  //**********************************************************************************************
598  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
599  IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
600  IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
601  , typename SMatDMatSubExprTrait< MT1, typename DMatDMatAddExprTrait<MT2,MT3>::Type >::Type
602  , INVALID_TYPE >::Type Type;
604  //**********************************************************************************************
605 };
607 //*************************************************************************************************
608 
609 
610 //*************************************************************************************************
612 template< typename MT1, typename MT2, typename MT3 >
613 struct DMatTDMatSubExprTrait< SMatDMatSubExpr<MT1,MT2,false>, MT3 >
614 {
615  public:
616  //**********************************************************************************************
618  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
619  IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
620  IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
621  , typename SMatDMatSubExprTrait< MT1, typename DMatTDMatAddExprTrait<MT2,MT3>::Type >::Type
622  , INVALID_TYPE >::Type Type;
624  //**********************************************************************************************
625 };
627 //*************************************************************************************************
628 
629 
630 //*************************************************************************************************
632 template< typename MT1, typename MT2, typename MT3 >
633 struct TDMatDMatSubExprTrait< SMatDMatSubExpr<MT1,MT2,true>, MT3 >
634 {
635  public:
636  //**********************************************************************************************
638  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
639  IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
640  IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
641  , typename TSMatDMatSubExprTrait< MT1, typename TDMatDMatAddExprTrait<MT2,MT3>::Type >::Type
642  , INVALID_TYPE >::Type Type;
644  //**********************************************************************************************
645 };
647 //*************************************************************************************************
648 
649 
650 //*************************************************************************************************
652 template< typename MT1, typename MT2, typename MT3 >
653 struct TDMatTDMatSubExprTrait< SMatDMatSubExpr<MT1,MT2,true>, MT3 >
654 {
655  public:
656  //**********************************************************************************************
658  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
659  IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
660  IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
661  , typename TSMatTDMatSubExprTrait< MT1, typename TDMatTDMatAddExprTrait<MT2,MT3>::Type >::Type
662  , INVALID_TYPE >::Type Type;
664  //**********************************************************************************************
665 };
667 //*************************************************************************************************
668 
669 
670 //*************************************************************************************************
672 template< typename MT1, typename MT2, bool SO >
673 struct SubmatrixExprTrait< SMatDMatSubExpr<MT1,MT2,SO> >
674 {
675  public:
676  //**********************************************************************************************
677  typedef typename SubExprTrait< typename SubmatrixExprTrait<const MT1>::Type
678  , typename SubmatrixExprTrait<const MT2>::Type >::Type Type;
679  //**********************************************************************************************
680 };
682 //*************************************************************************************************
683 
684 
685 //*************************************************************************************************
687 template< typename MT1, typename MT2, bool SO >
688 struct RowExprTrait< SMatDMatSubExpr<MT1,MT2,SO> >
689 {
690  public:
691  //**********************************************************************************************
692  typedef typename SubExprTrait< typename RowExprTrait<const MT1>::Type
693  , typename RowExprTrait<const MT2>::Type >::Type Type;
694  //**********************************************************************************************
695 };
697 //*************************************************************************************************
698 
699 
700 //*************************************************************************************************
702 template< typename MT1, typename MT2, bool SO >
703 struct ColumnExprTrait< SMatDMatSubExpr<MT1,MT2,SO> >
704 {
705  public:
706  //**********************************************************************************************
707  typedef typename SubExprTrait< typename ColumnExprTrait<const MT1>::Type
708  , typename ColumnExprTrait<const MT2>::Type >::Type Type;
709  //**********************************************************************************************
710 };
712 //*************************************************************************************************
713 
714 } // namespace blaze
715 
716 #endif
MT1::ReturnType RN1
Return type of the left-hand side sparse matrix expression.
Definition: SMatDMatSubExpr.h:96
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.
LeftOperand leftOperand() const
Returns the left-hand side sparse matrix operand.
Definition: SMatDMatSubExpr.h:193
Header file for the IsSparseMatrix type trait.
RightOperand rightOperand() const
Returns the right-hand side dense matrix operand.
Definition: SMatDMatSubExpr.h:203
#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
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: SMatDMatSubExpr.h:161
#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
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: SMatDMatSubExpr.h:228
SubExprTrait< RN1, RN2 >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: SMatDMatSubExpr.h:110
Header file for the ColumnExprTrait class template.
Header file for the IsColumnMajorMatrix type trait.
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.
SMatDMatSubExpr(const MT1 &lhs, const MT2 &rhs)
Constructor for the SMatDMatSubExpr class.
Definition: SMatDMatSubExpr.h:145
Header file for the Computation base class.
MT2::ReturnType RN2
Return type of the right-hand side dense matrix expression.
Definition: SMatDMatSubExpr.h:97
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.
SubTrait< RT1, RT2 >::Type ResultType
Result type for expression template evaluations.
Definition: SMatDMatSubExpr.h:116
Constraint on the data type.
Constraint on the data type.
SelectType< IsExpression< MT1 >::value, const MT1, const MT1 & >::Type LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: SMatDMatSubExpr.h:128
Expression object for sparse matrix-dense matrix subtractions.The SMatDMatSubExpr class represents th...
Definition: Forward.h:88
const ResultType CompositeType
Data type for composite expression templates.
Definition: SMatDMatSubExpr.h:125
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.
SelectType< IsExpression< MT2 >::value, const MT2, const MT2 & >::Type RightOperand
Composite type of the right-hand side sparse matrix expression.
Definition: SMatDMatSubExpr.h:131
const SelectType< returnExpr, ExprReturnType, ElementType >::Type ReturnType
Return type for expression template evaluations.
Definition: SMatDMatSubExpr.h:122
Header file for the DenseMatrix base class.
ResultType::ElementType ElementType
Resulting element type.
Definition: SMatDMatSubExpr.h:119
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
size_t columns() const
Returns the current number of columns of the matrix.
Definition: SMatDMatSubExpr.h:183
RightOperand rhs_
Right-hand side dense matrix of the subtraction expression.
Definition: SMatDMatSubExpr.h:236
#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
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.
ResultType::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: SMatDMatSubExpr.h:118
SMatDMatSubExpr< MT1, MT2, SO > This
Type of this SMatDMatSubExpr instance.
Definition: SMatDMatSubExpr.h:115
Header file for the SubmatrixExprTrait class template.
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2374
MT1::ResultType RT1
Result type of the left-hand side sparse matrix expression.
Definition: SMatDMatSubExpr.h:94
Header file for run time assertion macros.
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
size_t rows() const
Returns the current number of rows of the matrix.
Definition: SMatDMatSubExpr.h:173
LeftOperand lhs_
Left-hand side sparse matrix of the subtraction expression.
Definition: SMatDMatSubExpr.h:235
#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.
MT2::ResultType RT2
Result type of the right-hand side dense matrix expression.
Definition: SMatDMatSubExpr.h:95
#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
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: SMatDMatSubExpr.h:215
Header file for basic type definitions.
Base template for the SubTrait class.
Definition: SubTrait.h:141
ResultType::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: SMatDMatSubExpr.h:117
Header file for the SubExprTrait class template.
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
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.