22 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATTSMATSUBEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_DMATTSMATSUBEXPR_H_
68 template<
typename MT1
76 typedef typename MT1::ResultType
RT1;
77 typedef typename MT2::ResultType
RT2;
78 typedef typename MT1::ReturnType
RN1;
79 typedef typename MT2::ReturnType
RN2;
118 enum { vectorizable = 0 };
169 return lhs_.columns();
199 template<
typename T >
223 template<
typename MT
253 template<
typename MT
269 const TmpType tmp( rhs );
288 template<
typename MT
318 template<
typename MT
393 template<
typename T1
395 inline const DMatTSMatSubExpr<T1,T2>
399 throw std::invalid_argument(
"Matrix sizes do not match" );
427 template<
typename T1
431 inline const typename AddExprTrait< DMatTSMatSubExpr<T1,T2>, T3 >::Type
432 operator+(
const DMatTSMatSubExpr<T1,T2>& lhs,
const DenseMatrix<T3,SO>& rhs )
434 return ( lhs.leftOperand() + (~rhs) ) - lhs.rightOperand();
453 template<
typename T1
457 inline const typename SubExprTrait< DMatTSMatSubExpr<T1,T2>, T3 >::Type
458 operator-(
const DMatTSMatSubExpr<T1,T2>& lhs,
const DenseMatrix<T3,SO>& rhs )
460 return ( lhs.leftOperand() - (~rhs) ) - lhs.rightOperand();
476 template<
typename MT1,
typename MT2,
typename MT3 >
477 struct DMatDMatAddExprTrait< DMatTSMatSubExpr<MT1,MT2>, MT3 >
482 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
483 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
484 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
485 ,
typename DMatTSMatSubExprTrait< typename DMatDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
486 , INVALID_TYPE >::Type Type;
496 template<
typename MT1,
typename MT2,
typename MT3 >
497 struct DMatTDMatAddExprTrait< DMatTSMatSubExpr<MT1,MT2>, MT3 >
502 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
503 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
504 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
505 ,
typename DMatTSMatSubExprTrait< typename DMatTDMatAddExprTrait<MT1,MT3>::Type, MT2 >::Type
506 , INVALID_TYPE >::Type Type;
516 template<
typename MT1,
typename MT2,
typename MT3 >
517 struct DMatDMatSubExprTrait< DMatTSMatSubExpr<MT1,MT2>, MT3 >
522 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
523 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
524 IsDenseMatrix<MT3>::value && IsRowMajorMatrix<MT3>::value
525 ,
typename DMatTSMatSubExprTrait< typename DMatDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
526 , INVALID_TYPE >::Type Type;
536 template<
typename MT1,
typename MT2,
typename MT3 >
537 struct DMatTDMatSubExprTrait< DMatTSMatSubExpr<MT1,MT2>, MT3 >
542 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
543 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
544 IsDenseMatrix<MT3>::value && IsColumnMajorMatrix<MT3>::value
545 ,
typename DMatTSMatSubExprTrait< typename DMatTDMatSubExprTrait<MT1,MT3>::Type, MT2 >::Type
546 , INVALID_TYPE >::Type Type;