All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DMatSMatSubExpr.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSMATSUBEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATSMATSUBEXPR_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 DMATSMATSUBEXPR
75 //
76 //=================================================================================================
77 
78 //*************************************************************************************************
85 template< typename MT1 // Type of the left-hand side dense matrix
86  , typename MT2 // Type of the right-hand side sparse matrix
87  , bool SO > // Storage order
88 class DMatSMatSubExpr : public DenseMatrix< DMatSMatSubExpr<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 DMatSMatSubExpr( const MT1& lhs, const MT2& rhs )
146  : lhs_( lhs ) // Left-hand side dense matrix of the subtraction expression
147  , rhs_( rhs ) // Right-hand side sparse 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 ( IsExpression<MT1>::value && lhs_.canAlias( alias ) ) ||
217  ( 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 DMatSMatSubExpr& 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  if( !IsExpression<MT1>::value && (~lhs).isAliased( &rhs.lhs_ ) ) {
261  subAssign( ~lhs, rhs.rhs_ );
262  }
263  else {
264  assign ( ~lhs, rhs.lhs_ );
265  subAssign( ~lhs, rhs.rhs_ );
266  }
267  }
269  //**********************************************************************************************
270 
271  //**Assignment to sparse matrices***************************************************************
283  template< typename MT // Type of the target sparse matrix
284  , bool SO2 > // Storage order of the target sparse matrix
285  friend inline void assign( SparseMatrix<MT,SO2>& lhs, const DMatSMatSubExpr& rhs )
286  {
288 
290 
297 
298  BLAZE_INTERNAL_ASSERT( (~lhs).rows() == rhs.rows() , "Invalid number of rows" );
299  BLAZE_INTERNAL_ASSERT( (~lhs).columns() == rhs.columns(), "Invalid number of columns" );
300 
301  const TmpType tmp( rhs );
302  assign( ~lhs, tmp );
303  }
305  //**********************************************************************************************
306 
307  //**Addition assignment to dense matrices*******************************************************
319  template< typename MT // Type of the target dense matrix
320  , bool SO2 > // Storage order of the target dense matrix
321  friend inline void addAssign( DenseMatrix<MT,SO2>& lhs, const DMatSMatSubExpr& rhs )
322  {
324 
325  BLAZE_INTERNAL_ASSERT( (~lhs).rows() == rhs.rows() , "Invalid number of rows" );
326  BLAZE_INTERNAL_ASSERT( (~lhs).columns() == rhs.columns(), "Invalid number of columns" );
327 
328  addAssign( ~lhs, rhs.lhs_ );
329  subAssign( ~lhs, rhs.rhs_ );
330  }
332  //**********************************************************************************************
333 
334  //**Addition assignment to sparse matrices******************************************************
335  // No special implementation for the addition assignment to sparse matrices.
336  //**********************************************************************************************
337 
338  //**Subtraction assignment to dense matrices****************************************************
350  template< typename MT // Type of the target dense matrix
351  , bool SO2 > // Storage order of the target dense matrix
352  friend inline void subAssign( DenseMatrix<MT,SO2>& lhs, const DMatSMatSubExpr& rhs )
353  {
355 
356  BLAZE_INTERNAL_ASSERT( (~lhs).rows() == rhs.rows() , "Invalid number of rows" );
357  BLAZE_INTERNAL_ASSERT( (~lhs).columns() == rhs.columns(), "Invalid number of columns" );
358 
359  subAssign( ~lhs, rhs.lhs_ );
360  addAssign( ~lhs, rhs.rhs_ );
361  }
363  //**********************************************************************************************
364 
365  //**Subtraction assignment to sparse matrices***************************************************
366  // No special implementation for the subtraction assignment to sparse matrices.
367  //**********************************************************************************************
368 
369  //**Multiplication assignment to dense matrices*************************************************
370  // No special implementation for the multiplication assignment to dense matrices.
371  //**********************************************************************************************
372 
373  //**Multiplication assignment to sparse matrices************************************************
374  // No special implementation for the multiplication assignment to sparse matrices.
375  //**********************************************************************************************
376 
377  //**Compile time checks*************************************************************************
383  //**********************************************************************************************
384 };
385 //*************************************************************************************************
386 
387 
388 
389 
390 //=================================================================================================
391 //
392 // GLOBAL BINARY ARITHMETIC OPERATORS
393 //
394 //=================================================================================================
395 
396 //*************************************************************************************************
425 template< typename T1 // Type of the left-hand side dense matrix
426  , typename T2 // Type of the right-hand side sparse matrix
427  , bool SO > // Storage order
428 inline const DMatSMatSubExpr<T1,T2,SO>
430 {
432 
433  if( (~lhs).rows() != (~rhs).rows() || (~lhs).columns() != (~rhs).columns() )
434  throw std::invalid_argument( "Matrix sizes do not match" );
435 
436  return DMatSMatSubExpr<T1,T2,SO>( ~lhs, ~rhs );
437 }
438 //*************************************************************************************************
439 
440 
441 
442 
443 //=================================================================================================
444 //
445 // GLOBAL RESTRUCTURING BINARY ARITHMETIC OPERATORS
446 //
447 //=================================================================================================
448 
449 //*************************************************************************************************
462 template< typename T1 // Type of the dense matrix of the left-hand side expression
463  , typename T2 // Type of the sparse matrix of the left-hand side expression
464  , bool SO1 // Storage order of the left-hand side expression
465  , typename T3 // Type of the right-hand side dense matrix
466  , bool SO2 > // Storage order of the right-hand side dense matrix
467 inline const typename AddExprTrait< DMatSMatSubExpr<T1,T2,SO1>, T3 >::Type
468  operator+( const DMatSMatSubExpr<T1,T2,SO1>& lhs, const DenseMatrix<T3,SO2>& rhs )
469 {
471 
472  return ( lhs.leftOperand() + (~rhs) ) - lhs.rightOperand();
473 }
475 //*************************************************************************************************
476 
477 
478 //*************************************************************************************************
491 template< typename T1 // Type of the dense matrix of the left-hand side expression
492  , typename T2 // Type of the sparse matrix of the left-hand side expression
493  , bool SO1 // Storage order of the left-hand side expression
494  , typename T3 // Type of the right-hand side dense matrix
495  , bool SO2 > // Storage order of the right-hand side dense matrix
496 inline const typename SubExprTrait< DMatSMatSubExpr<T1,T2,SO1>, T3 >::Type
497  operator-( const DMatSMatSubExpr<T1,T2,SO1>& lhs, const DenseMatrix<T3,SO2>& rhs )
498 {
500 
501  return ( lhs.leftOperand() - (~rhs) ) - lhs.rightOperand();
502 }
504 //*************************************************************************************************
505 
506 
507 
508 
509 //=================================================================================================
510 //
511 // EXPRESSION TRAIT SPECIALIZATIONS
512 //
513 //=================================================================================================
514 
515 //*************************************************************************************************
517 template< typename MT1, typename MT2, typename MT3 >
518 struct DMatDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
519 {
520  public:
521  //**********************************************************************************************
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;
529  //**********************************************************************************************
530 };
532 //*************************************************************************************************
533 
534 
535 //*************************************************************************************************
537 template< typename MT1, typename MT2, typename MT3 >
538 struct DMatTDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
539 {
540  public:
541  //**********************************************************************************************
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;
549  //**********************************************************************************************
550 };
552 //*************************************************************************************************
553 
554 
555 //*************************************************************************************************
557 template< typename MT1, typename MT2, typename MT3 >
558 struct TDMatDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
559 {
560  public:
561  //**********************************************************************************************
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;
569  //**********************************************************************************************
570 };
572 //*************************************************************************************************
573 
574 
575 //*************************************************************************************************
577 template< typename MT1, typename MT2, typename MT3 >
578 struct TDMatTDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
579 {
580  public:
581  //**********************************************************************************************
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;
589  //**********************************************************************************************
590 };
592 //*************************************************************************************************
593 
594 
595 //*************************************************************************************************
597 template< typename MT1, typename MT2, typename MT3 >
598 struct DMatDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
599 {
600  public:
601  //**********************************************************************************************
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;
609  //**********************************************************************************************
610 };
612 //*************************************************************************************************
613 
614 
615 //*************************************************************************************************
617 template< typename MT1, typename MT2, typename MT3 >
618 struct DMatTDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
619 {
620  public:
621  //**********************************************************************************************
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;
629  //**********************************************************************************************
630 };
632 //*************************************************************************************************
633 
634 
635 //*************************************************************************************************
637 template< typename MT1, typename MT2, typename MT3 >
638 struct TDMatDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
639 {
640  public:
641  //**********************************************************************************************
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;
649  //**********************************************************************************************
650 };
652 //*************************************************************************************************
653 
654 
655 //*************************************************************************************************
657 template< typename MT1, typename MT2, typename MT3 >
658 struct TDMatTDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
659 {
660  public:
661  //**********************************************************************************************
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;
669  //**********************************************************************************************
670 };
672 //*************************************************************************************************
673 
674 
675 //*************************************************************************************************
677 template< typename MT1, typename MT2, bool SO >
678 struct SubmatrixExprTrait< DMatSMatSubExpr<MT1,MT2,SO> >
679 {
680  public:
681  //**********************************************************************************************
682  typedef typename SubExprTrait< typename SubmatrixExprTrait<const MT1>::Type
683  , typename SubmatrixExprTrait<const MT2>::Type >::Type Type;
684  //**********************************************************************************************
685 };
687 //*************************************************************************************************
688 
689 
690 //*************************************************************************************************
692 template< typename MT1, typename MT2, bool SO >
693 struct RowExprTrait< DMatSMatSubExpr<MT1,MT2,SO> >
694 {
695  public:
696  //**********************************************************************************************
697  typedef typename SubExprTrait< typename RowExprTrait<const MT1>::Type
698  , typename RowExprTrait<const MT2>::Type >::Type Type;
699  //**********************************************************************************************
700 };
702 //*************************************************************************************************
703 
704 
705 //*************************************************************************************************
707 template< typename MT1, typename MT2, bool SO >
708 struct ColumnExprTrait< DMatSMatSubExpr<MT1,MT2,SO> >
709 {
710  public:
711  //**********************************************************************************************
712  typedef typename SubExprTrait< typename ColumnExprTrait<const MT1>::Type
713  , typename ColumnExprTrait<const MT2>::Type >::Type Type;
714  //**********************************************************************************************
715 };
717 //*************************************************************************************************
718 
719 } // namespace blaze
720 
721 #endif
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.