22 #ifndef _BLAZE_MATH_EXPRESSIONS_SVECDVECSUBEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_SVECDVECSUBEXPR_H_
69 template<
typename VT1
78 typedef typename VT1::ResultType
RT1;
79 typedef typename VT2::ResultType
RT2;
80 typedef typename VT1::ReturnType
RN1;
81 typedef typename VT2::ReturnType
RN2;
82 typedef typename VT1::CompositeType
CT1;
83 typedef typename VT2::CompositeType
CT2;
84 typedef typename VT1::TransposeType
TT1;
85 typedef typename VT2::TransposeType
TT2;
123 enum { vectorizable = 0 };
191 template<
typename T >
215 template<
typename VT >
238 template<
typename VT >
265 template<
typename VT >
292 template<
typename VT >
319 template<
typename VT >
384 template<
typename T1
390 if( (~lhs).size() != (~rhs).size() )
391 throw std::invalid_argument(
"Vector sizes do not match" );
419 template<
typename T1
423 inline const typename AddExprTrait< SVecDVecSubExpr<T1,T2,TF>, T3 >::Type
426 return ( (~rhs) - lhs.rightOperand() ) + lhs.leftOperand();
445 template<
typename T1
449 inline const typename SubExprTrait< SVecDVecSubExpr<T1,T2,TF>, T3 >::Type
452 return lhs.leftOperand() - ( lhs.rightOperand() + (~rhs) );
468 template<
typename VT1,
typename VT2,
typename VT3 >
474 typedef typename SelectType< IsSparseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
475 IsDenseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
476 IsDenseVector<VT3>::value && !IsTransposeVector<VT3>::value
477 ,
typename DVecSVecAddExprTrait< typename DVecDVecSubExprTrait<VT3,VT2>::Type, VT1 >::Type
478 , INVALID_TYPE >::Type Type;
488 template<
typename VT1,
typename VT2,
typename VT3 >
494 typedef typename SelectType< IsSparseVector<VT1>::value && IsTransposeVector<VT1>::value &&
495 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
496 IsDenseVector<VT3>::value && IsTransposeVector<VT3>::value
497 ,
typename TDVecTSVecAddExprTrait< typename TDVecTDVecSubExprTrait<VT3,VT2>::Type, VT1 >::Type
498 , INVALID_TYPE >::Type Type;
508 template<
typename VT1,
typename VT2,
typename VT3 >
514 typedef typename SelectType< IsSparseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
515 IsDenseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
516 IsDenseVector<VT3>::value && !IsTransposeVector<VT3>::value
517 ,
typename SVecDVecSubExprTrait< VT1, typename DVecDVecAddExprTrait<VT2,VT3>::Type >::Type
518 , INVALID_TYPE >::Type Type;
528 template<
typename VT1,
typename VT2,
typename VT3 >
534 typedef typename SelectType< IsSparseVector<VT1>::value && IsTransposeVector<VT1>::value &&
535 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
536 IsDenseVector<VT3>::value && IsTransposeVector<VT3>::value
537 ,
typename TSVecTDVecSubExprTrait< VT1, typename TDVecTDVecAddExprTrait<VT2,VT3>::Type >::Type
538 , INVALID_TYPE >::Type Type;