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>
65 #include <blaze/util/Assert.h>
68 #include <blaze/util/SelectType.h>
69 #include <blaze/util/Types.h>
70 
71 
72 namespace blaze {
73 
74 //=================================================================================================
75 //
76 // CLASS SMATDMATSUBEXPR
77 //
78 //=================================================================================================
79 
80 //*************************************************************************************************
87 template< typename MT1 // Type of the left-hand side sparse matrix
88  , typename MT2 // Type of the right-hand side dense matrix
89  , bool SO > // Storage order
90 class SMatDMatSubExpr : public DenseMatrix< SMatDMatSubExpr<MT1,MT2,SO>, SO >
91  , private MatMatSubExpr
92  , private Computation
93 {
94  private:
95  //**Type definitions****************************************************************************
96  typedef typename MT1::ResultType RT1;
97  typedef typename MT2::ResultType RT2;
98  typedef typename MT1::ReturnType RN1;
99  typedef typename MT2::ReturnType RN2;
100  //**********************************************************************************************
101 
102  //**Return type evaluation**********************************************************************
104 
109  enum { returnExpr = !IsTemporary<RN1>::value && !IsTemporary<RN2>::value };
110 
113  //**********************************************************************************************
114 
115  public:
116  //**Type definitions****************************************************************************
122 
125 
127  typedef const ResultType CompositeType;
128 
130  typedef typename SelectType< IsExpression<MT1>::value, const MT1, const MT1& >::Type LeftOperand;
131 
133  typedef typename SelectType< IsExpression<MT2>::value, const MT2, const MT2& >::Type RightOperand;
134  //**********************************************************************************************
135 
136  //**Compilation flags***************************************************************************
138  enum { vectorizable = 0 };
139 
141  enum { smpAssignable = 0 };
142  //**********************************************************************************************
143 
144  //**Constructor*********************************************************************************
150  explicit inline SMatDMatSubExpr( const MT1& lhs, const MT2& rhs )
151  : lhs_( lhs ) // Left-hand side sparse matrix of the subtraction expression
152  , rhs_( rhs ) // Right-hand side dense matrix of the subtraction expression
153  {
154  BLAZE_INTERNAL_ASSERT( lhs.rows() == rhs.rows() , "Invalid number of rows" );
155  BLAZE_INTERNAL_ASSERT( lhs.columns() == rhs.columns(), "Invalid number of columns" );
156  }
157  //**********************************************************************************************
158 
159  //**Access operator*****************************************************************************
166  inline ReturnType operator()( size_t i, size_t j ) const {
167  BLAZE_INTERNAL_ASSERT( i < lhs_.rows() , "Invalid row access index" );
168  BLAZE_INTERNAL_ASSERT( j < lhs_.columns(), "Invalid column access index" );
169  return lhs_(i,j) - rhs_(i,j);
170  }
171  //**********************************************************************************************
172 
173  //**Rows function*******************************************************************************
178  inline size_t rows() const {
179  return lhs_.rows();
180  }
181  //**********************************************************************************************
182 
183  //**Columns function****************************************************************************
188  inline size_t columns() const {
189  return lhs_.columns();
190  }
191  //**********************************************************************************************
192 
193  //**Left operand access*************************************************************************
198  inline LeftOperand leftOperand() const {
199  return lhs_;
200  }
201  //**********************************************************************************************
202 
203  //**Right operand access************************************************************************
208  inline RightOperand rightOperand() const {
209  return rhs_;
210  }
211  //**********************************************************************************************
212 
213  //**********************************************************************************************
219  template< typename T >
220  inline bool canAlias( const T* alias ) const {
221  return ( lhs_.canAlias( alias ) ) ||
222  ( IsExpression<MT2>::value && rhs_.canAlias( alias ) );
223  }
224  //**********************************************************************************************
225 
226  //**********************************************************************************************
232  template< typename T >
233  inline bool isAliased( const T* alias ) const {
234  return lhs_.isAliased( alias ) || rhs_.isAliased( alias );
235  }
236  //**********************************************************************************************
237 
238  private:
239  //**Member variables****************************************************************************
242  //**********************************************************************************************
243 
244  //**Assignment to dense matrices****************************************************************
256  template< typename MT // Type of the target dense matrix
257  , bool SO2 > // Storage order of the target dense matrix
258  friend inline void assign( DenseMatrix<MT,SO2>& lhs, const SMatDMatSubExpr& rhs )
259  {
261 
262  BLAZE_INTERNAL_ASSERT( (~lhs).rows() == rhs.rows() , "Invalid number of rows" );
263  BLAZE_INTERNAL_ASSERT( (~lhs).columns() == rhs.columns(), "Invalid number of columns" );
264 
265  smpAssign ( ~lhs, -rhs.rhs_ );
266  smpAddAssign( ~lhs, rhs.lhs_ );
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 SMatDMatSubExpr& 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  smpAssign( ~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 SMatDMatSubExpr& 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  smpSubAssign( ~lhs, rhs.rhs_ );
329  smpAddAssign( ~lhs, rhs.lhs_ );
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 SMatDMatSubExpr& 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  smpAddAssign( ~lhs, rhs.rhs_ );
360  smpSubAssign( ~lhs, rhs.lhs_ );
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 sparse matrix
426  , typename T2 // Type of the right-hand side dense matrix
427  , bool SO > // Storage order
428 inline const SMatDMatSubExpr<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 SMatDMatSubExpr<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 sparse matrix of the left-hand side expression
463  , typename T2 // Type of the dense 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< SMatDMatSubExpr<T1,T2,SO1>, T3 >::Type
468  operator+( const SMatDMatSubExpr<T1,T2,SO1>& lhs, const DenseMatrix<T3,SO2>& rhs )
469 {
471 
472  return ( (~rhs) - lhs.rightOperand() ) + lhs.leftOperand();
473 }
475 //*************************************************************************************************
476 
477 
478 //*************************************************************************************************
491 template< typename T1 // Type of the sparse matrix of the left-hand side expression
492  , typename T2 // Type of the dense 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< SMatDMatSubExpr<T1,T2,SO1>, T3 >::Type
497  operator-( const SMatDMatSubExpr<T1,T2,SO1>& lhs, const DenseMatrix<T3,SO2>& rhs )
498 {
500 
501  return lhs.leftOperand() - ( lhs.rightOperand() + (~rhs) );
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< SMatDMatSubExpr<MT1,MT2,false>, MT3 >
519 {
520  public:
521  //**********************************************************************************************
523  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
524  IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
525  IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
526  , typename DMatSMatAddExprTrait< typename DMatDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
527  , INVALID_TYPE >::Type Type;
529  //**********************************************************************************************
530 };
532 //*************************************************************************************************
533 
534 
535 //*************************************************************************************************
537 template< typename MT1, typename MT2, typename MT3 >
538 struct DMatTDMatAddExprTrait< SMatDMatSubExpr<MT1,MT2,false>, MT3 >
539 {
540  public:
541  //**********************************************************************************************
543  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
544  IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
545  IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
546  , typename DMatSMatAddExprTrait< typename TDMatDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
547  , INVALID_TYPE >::Type Type;
549  //**********************************************************************************************
550 };
552 //*************************************************************************************************
553 
554 
555 //*************************************************************************************************
557 template< typename MT1, typename MT2, typename MT3 >
558 struct TDMatDMatAddExprTrait< SMatDMatSubExpr<MT1,MT2,true>, MT3 >
559 {
560  public:
561  //**********************************************************************************************
563  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
564  IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
565  IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
566  , typename DMatTSMatAddExprTrait< typename DMatTDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
567  , INVALID_TYPE >::Type Type;
569  //**********************************************************************************************
570 };
572 //*************************************************************************************************
573 
574 
575 //*************************************************************************************************
577 template< typename MT1, typename MT2, typename MT3 >
578 struct TDMatTDMatAddExprTrait< SMatDMatSubExpr<MT1,MT2,true>, MT3 >
579 {
580  public:
581  //**********************************************************************************************
583  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
584  IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
585  IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
586  , typename TDMatTSMatAddExprTrait< typename TDMatTDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
587  , INVALID_TYPE >::Type Type;
589  //**********************************************************************************************
590 };
592 //*************************************************************************************************
593 
594 
595 //*************************************************************************************************
597 template< typename MT1, typename MT2, typename MT3 >
598 struct DMatDMatSubExprTrait< SMatDMatSubExpr<MT1,MT2,false>, MT3 >
599 {
600  public:
601  //**********************************************************************************************
603  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
604  IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
605  IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
606  , typename SMatDMatSubExprTrait< MT1, typename DMatDMatAddExprTrait<MT2,MT3>::Type >::Type
607  , INVALID_TYPE >::Type Type;
609  //**********************************************************************************************
610 };
612 //*************************************************************************************************
613 
614 
615 //*************************************************************************************************
617 template< typename MT1, typename MT2, typename MT3 >
618 struct DMatTDMatSubExprTrait< SMatDMatSubExpr<MT1,MT2,false>, MT3 >
619 {
620  public:
621  //**********************************************************************************************
623  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
624  IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
625  IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
626  , typename SMatDMatSubExprTrait< MT1, typename DMatTDMatAddExprTrait<MT2,MT3>::Type >::Type
627  , INVALID_TYPE >::Type Type;
629  //**********************************************************************************************
630 };
632 //*************************************************************************************************
633 
634 
635 //*************************************************************************************************
637 template< typename MT1, typename MT2, typename MT3 >
638 struct TDMatDMatSubExprTrait< SMatDMatSubExpr<MT1,MT2,true>, MT3 >
639 {
640  public:
641  //**********************************************************************************************
643  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
644  IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
645  IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
646  , typename TSMatDMatSubExprTrait< MT1, typename TDMatDMatAddExprTrait<MT2,MT3>::Type >::Type
647  , INVALID_TYPE >::Type Type;
649  //**********************************************************************************************
650 };
652 //*************************************************************************************************
653 
654 
655 //*************************************************************************************************
657 template< typename MT1, typename MT2, typename MT3 >
658 struct TDMatTDMatSubExprTrait< SMatDMatSubExpr<MT1,MT2,true>, MT3 >
659 {
660  public:
661  //**********************************************************************************************
663  typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
664  IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
665  IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
666  , typename TSMatTDMatSubExprTrait< MT1, typename TDMatTDMatAddExprTrait<MT2,MT3>::Type >::Type
667  , INVALID_TYPE >::Type Type;
669  //**********************************************************************************************
670 };
672 //*************************************************************************************************
673 
674 
675 //*************************************************************************************************
677 template< typename MT1, typename MT2, bool SO, bool AF >
678 struct SubmatrixExprTrait< SMatDMatSubExpr<MT1,MT2,SO>, AF >
679 {
680  public:
681  //**********************************************************************************************
682  typedef typename SubExprTrait< typename SubmatrixExprTrait<const MT1,AF>::Type
683  , typename SubmatrixExprTrait<const MT2,AF>::Type >::Type Type;
684  //**********************************************************************************************
685 };
687 //*************************************************************************************************
688 
689 
690 //*************************************************************************************************
692 template< typename MT1, typename MT2, bool SO >
693 struct RowExprTrait< SMatDMatSubExpr<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< SMatDMatSubExpr<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
MT1::ReturnType RN1
Return type of the left-hand side sparse matrix expression.
Definition: SMatDMatSubExpr.h:98
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:198
void smpSubAssign(DenseMatrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:151
Header file for the IsSparseMatrix type trait.
RightOperand rightOperand() const
Returns the right-hand side dense matrix operand.
Definition: SMatDMatSubExpr.h:208
#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:197
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: SMatDMatSubExpr.h:166
#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:233
SubExprTrait< RN1, RN2 >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: SMatDMatSubExpr.h:112
Header file for the ColumnExprTrait class template.
Header file for the IsColumnMajorMatrix type trait.
Header file for the sparse matrix SMP implementation.
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2384
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:249
Header file for the AddExprTrait class template.
SMatDMatSubExpr(const MT1 &lhs, const MT2 &rhs)
Constructor for the SMatDMatSubExpr class.
Definition: SMatDMatSubExpr.h:150
Header file for the Computation base class.
MT2::ReturnType RN2
Return type of the right-hand side dense matrix expression.
Definition: SMatDMatSubExpr.h:99
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:118
Constraint on the data type.
Constraint on the data type.
void smpAddAssign(DenseMatrix< 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:121
SelectType< IsExpression< MT1 >::value, const MT1, const MT1 & >::Type LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: SMatDMatSubExpr.h:130
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:127
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:133
Header file for the dense matrix SMP implementation.
const SelectType< returnExpr, ExprReturnType, ElementType >::Type ReturnType
Return type for expression template evaluations.
Definition: SMatDMatSubExpr.h:124
Header file for the DenseMatrix base class.
ResultType::ElementType ElementType
Resulting element type.
Definition: SMatDMatSubExpr.h:121
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:188
RightOperand rhs_
Right-hand side dense matrix of the subtraction expression.
Definition: SMatDMatSubExpr.h:241
#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.
void smpAssign(DenseMatrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:91
ResultType::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: SMatDMatSubExpr.h:120
SMatDMatSubExpr< MT1, MT2, SO > This
Type of this SMatDMatSubExpr instance.
Definition: SMatDMatSubExpr.h:117
Header file for the SubmatrixExprTrait class template.
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2383
MT1::ResultType RT1
Result type of the left-hand side sparse matrix expression.
Definition: SMatDMatSubExpr.h:96
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:178
LeftOperand lhs_
Left-hand side sparse matrix of the subtraction expression.
Definition: SMatDMatSubExpr.h:240
#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:97
#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:2379
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:220
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:119
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.