22 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSMATSUBEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_DMATSMATSUBEXPR_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
254 template<
typename MT
270 const TmpType tmp( rhs );
288 template<
typename MT
317 template<
typename MT
390 template<
typename T1
393 inline const DMatSMatSubExpr<T1,T2,SO>
397 throw std::invalid_argument(
"Matrix sizes do not match" );
425 template<
typename T1
430 inline const typename AddExprTrait< DMatSMatSubExpr<T1,T2,SO1>, T3 >::Type
431 operator+(
const DMatSMatSubExpr<T1,T2,SO1>& lhs,
const DenseMatrix<T3,SO2>& rhs )
433 return ( lhs.leftOperand() + (~rhs) ) - lhs.rightOperand();
452 template<
typename T1
457 inline const typename SubExprTrait< DMatSMatSubExpr<T1,T2,SO1>, T3 >::Type
458 operator-(
const DMatSMatSubExpr<T1,T2,SO1>& lhs,
const DenseMatrix<T3,SO2>& rhs )
460 return ( lhs.leftOperand() - (~rhs) ) - lhs.rightOperand();
476 template<
typename MT1,
typename MT2,
typename MT3 >
477 struct DMatDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
482 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
483 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
484 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
485 ,
typename DMatSMatSubExprTrait< typename DMatDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
486 , INVALID_TYPE >::Type Type;
496 template<
typename MT1,
typename MT2,
typename MT3 >
497 struct DMatTDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
502 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
503 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
504 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
505 ,
typename DMatSMatSubExprTrait< typename DMatTDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
506 , INVALID_TYPE >::Type Type;
516 template<
typename MT1,
typename MT2,
typename MT3 >
517 struct TDMatDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
522 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
523 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
524 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
525 ,
typename DMatTSMatSubExprTrait< typename TDMatDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
526 , INVALID_TYPE >::Type Type;
536 template<
typename MT1,
typename MT2,
typename MT3 >
537 struct TDMatTDMatAddExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
542 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
543 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
544 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
545 ,
typename TDMatTSMatSubExprTrait< typename TDMatTDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
546 , INVALID_TYPE >::Type Type;
556 template<
typename MT1,
typename MT2,
typename MT3 >
557 struct DMatDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
562 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
563 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
564 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
565 ,
typename DMatSMatSubExprTrait< typename DMatDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
566 , INVALID_TYPE >::Type Type;
576 template<
typename MT1,
typename MT2,
typename MT3 >
577 struct DMatTDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,false>, MT3 >
582 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
583 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
584 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
585 ,
typename DMatSMatSubExprTrait< typename DMatTDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
586 , INVALID_TYPE >::Type Type;
596 template<
typename MT1,
typename MT2,
typename MT3 >
597 struct TDMatDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
602 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
603 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
604 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
605 ,
typename DMatTSMatSubExprTrait< typename TDMatDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
606 , INVALID_TYPE >::Type Type;
616 template<
typename MT1,
typename MT2,
typename MT3 >
617 struct TDMatTDMatSubExprTrait< DMatSMatSubExpr<MT1,MT2,true>, MT3 >
622 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
623 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
624 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
625 ,
typename TDMatTSMatSubExprTrait< typename TDMatTDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
626 , INVALID_TYPE >::Type Type;