22 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATDMATSUBEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_SMATDMATSUBEXPR_H_
68 template<
typename MT1
77 typedef typename MT1::ResultType
RT1;
78 typedef typename MT2::ResultType
RT2;
79 typedef typename MT1::ReturnType
RN1;
80 typedef typename MT2::ReturnType
RN2;
119 enum { vectorizable = 0 };
170 return lhs_.columns();
200 template<
typename T >
224 template<
typename MT
249 template<
typename MT
265 const TmpType tmp( rhs );
283 template<
typename MT
312 template<
typename MT
385 template<
typename T1
392 throw std::invalid_argument(
"Matrix sizes do not match" );
420 template<
typename T1
425 inline const typename AddExprTrait< SMatDMatSubExpr<T1,T2,SO1>, T3 >::Type
428 return ( (~rhs) - lhs.rightOperand() ) + lhs.leftOperand();
447 template<
typename T1
452 inline const typename SubExprTrait< SMatDMatSubExpr<T1,T2,SO1>, T3 >::Type
455 return lhs.leftOperand() - ( lhs.rightOperand() + (~rhs) );
471 template<
typename MT1,
typename MT2,
typename MT3 >
477 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
478 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
479 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
480 ,
typename DMatSMatAddExprTrait< typename DMatDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
481 , INVALID_TYPE >::Type Type;
491 template<
typename MT1,
typename MT2,
typename MT3 >
497 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
498 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
499 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
500 ,
typename DMatSMatAddExprTrait< typename TDMatDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
501 , INVALID_TYPE >::Type Type;
511 template<
typename MT1,
typename MT2,
typename MT3 >
517 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
518 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
519 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
520 ,
typename DMatTSMatAddExprTrait< typename DMatTDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
521 , INVALID_TYPE >::Type Type;
531 template<
typename MT1,
typename MT2,
typename MT3 >
537 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
538 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
539 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
540 ,
typename TDMatTSMatAddExprTrait< typename TDMatTDMatSubExprTrait<MT3,MT2>::Type, MT1 >::Type
541 , INVALID_TYPE >::Type Type;
551 template<
typename MT1,
typename MT2,
typename MT3 >
557 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
558 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
559 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
560 ,
typename SMatDMatSubExprTrait< MT1, typename DMatDMatAddExprTrait<MT2,MT3>::Type >::Type
561 , INVALID_TYPE >::Type Type;
571 template<
typename MT1,
typename MT2,
typename MT3 >
577 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
578 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
579 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
580 ,
typename SMatDMatSubExprTrait< MT1, typename DMatTDMatAddExprTrait<MT2,MT3>::Type >::Type
581 , INVALID_TYPE >::Type Type;
591 template<
typename MT1,
typename MT2,
typename MT3 >
597 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
598 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
599 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
600 ,
typename TSMatDMatSubExprTrait< MT1, typename TDMatDMatAddExprTrait<MT2,MT3>::Type >::Type
601 , INVALID_TYPE >::Type Type;
611 template<
typename MT1,
typename MT2,
typename MT3 >
617 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
618 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
619 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
620 ,
typename TSMatTDMatSubExprTrait< MT1, typename TDMatTDMatAddExprTrait<MT2,MT3>::Type >::Type
621 , INVALID_TYPE >::Type Type;