22 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSMATADDEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_DMATSMATADDEXPR_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
387 template<
typename T1
390 inline const DMatSMatAddExpr<T1,T2,SO>
394 throw std::invalid_argument(
"Matrix sizes do not match" );
427 template<
typename T1
430 inline const DMatSMatAddExpr<T2,T1,SO>
434 throw std::invalid_argument(
"Matrix sizes do not match" );
462 template<
typename T1
467 inline const typename AddExprTrait< DMatSMatAddExpr<T1,T2,SO1>, T3 >::Type
468 operator+(
const DMatSMatAddExpr<T1,T2,SO1>& lhs,
const DenseMatrix<T3,SO2>& rhs )
470 return ( lhs.leftOperand() + (~rhs) ) + lhs.rightOperand();
489 template<
typename T1
494 inline const typename SubExprTrait< DMatSMatAddExpr<T1,T2,SO1>, T3 >::Type
495 operator-(
const DMatSMatAddExpr<T1,T2,SO1>& lhs,
const DenseMatrix<T3,SO2>& rhs )
497 return ( lhs.leftOperand() - (~rhs) ) + lhs.rightOperand();
513 template<
typename MT1,
typename MT2,
typename MT3 >
514 struct DMatDMatAddExprTrait< DMatSMatAddExpr<MT1,MT2,false>, MT3 >
519 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
520 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
521 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
522 ,
typename DMatSMatAddExprTrait< typename DMatDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
523 , INVALID_TYPE >::Type Type;
533 template<
typename MT1,
typename MT2,
typename MT3 >
534 struct DMatTDMatAddExprTrait< DMatSMatAddExpr<MT1,MT2,false>, MT3 >
539 typedef typename SelectType< IsDenseMatrix <MT1>::value && IsRowMajorMatrix<MT1>::value &&
540 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
541 IsDenseMatrix <MT3>::value && IsColumnMajorMatrix<MT3>::value
542 ,
typename DMatSMatAddExprTrait< typename DMatTDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
543 , INVALID_TYPE >::Type Type;
553 template<
typename MT1,
typename MT2,
typename MT3 >
554 struct TDMatDMatAddExprTrait< DMatSMatAddExpr<MT1,MT2,true>, MT3 >
559 typedef typename SelectType< IsDenseMatrix <MT1>::value && IsColumnMajorMatrix<MT1>::value &&
560 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
561 IsDenseMatrix <MT3>::value && IsRowMajorMatrix<MT3>::value
562 ,
typename DMatTSMatAddExprTrait< typename TDMatDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
563 , INVALID_TYPE >::Type Type;
573 template<
typename MT1,
typename MT2,
typename MT3 >
574 struct TDMatTDMatAddExprTrait< DMatSMatAddExpr<MT1,MT2,true>, MT3 >
579 typedef typename SelectType< IsDenseMatrix <MT1>::value && IsColumnMajorMatrix<MT1>::value &&
580 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
581 IsDenseMatrix <MT3>::value && IsColumnMajorMatrix<MT3>::value
582 ,
typename TDMatTSMatAddExprTrait< typename TDMatTDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
583 , INVALID_TYPE >::Type Type;
593 template<
typename MT1,
typename MT2,
typename MT3 >
594 struct DMatDMatSubExprTrait< DMatSMatAddExpr<MT1,MT2,false>, MT3 >
599 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
600 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
601 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
602 ,
typename DMatSMatAddExprTrait< typename DMatDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
603 , INVALID_TYPE >::Type Type;
613 template<
typename MT1,
typename MT2,
typename MT3 >
614 struct DMatTDMatSubExprTrait< DMatSMatAddExpr<MT1,MT2,false>, MT3 >
619 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
620 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
621 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
622 ,
typename DMatSMatAddExprTrait< typename DMatTDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
623 , INVALID_TYPE >::Type Type;
633 template<
typename MT1,
typename MT2,
typename MT3 >
634 struct TDMatDMatSubExprTrait< DMatSMatAddExpr<MT1,MT2,true>, MT3 >
639 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
640 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
641 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
642 ,
typename DMatTSMatAddExprTrait< typename TDMatDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
643 , INVALID_TYPE >::Type Type;
653 template<
typename MT1,
typename MT2,
typename MT3 >
654 struct TDMatTDMatSubExprTrait< DMatSMatAddExpr<MT1,MT2,true>, MT3 >
659 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
660 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
661 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
662 ,
typename TDMatTSMatAddExprTrait< typename TDMatTDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
663 , INVALID_TYPE >::Type Type;