22 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECSVECADDEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_DVECSVECADDEXPR_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
387 inline const DVecSVecAddExpr<T1,T2,TF>
390 if( (~lhs).
size() != (~rhs).
size() )
391 throw std::invalid_argument(
"Vector sizes do not match" );
424 template<
typename T1
427 inline const DVecSVecAddExpr<T2,T1,TF>
430 if( (~lhs).
size() != (~rhs).
size() )
431 throw std::invalid_argument(
"Vector sizes do not match" );
459 template<
typename T1
463 inline const typename AddExprTrait< DVecSVecAddExpr<T1,T2,TF>, T3 >::Type
464 operator+(
const DVecSVecAddExpr<T1,T2,TF>& lhs,
const DenseVector<T3,TF>& rhs )
466 return ( lhs.leftOperand() + (~rhs) ) + lhs.rightOperand();
485 template<
typename T1
489 inline const typename SubExprTrait< DVecSVecAddExpr<T1,T2,TF>, T3 >::Type
490 operator-(
const DVecSVecAddExpr<T1,T2,TF>& lhs,
const DenseVector<T3,TF>& rhs )
492 return ( lhs.leftOperand() - (~rhs) ) + lhs.rightOperand();
508 template<
typename VT1,
typename VT2,
typename VT3 >
514 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
515 IsSparseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
516 IsDenseVector<VT3>::value && !IsTransposeVector<VT3>::value
517 ,
typename DVecSVecAddExprTrait< typename DVecDVecAddExprTrait<VT1,VT3>::Type, VT2 >::Type
518 , INVALID_TYPE >::Type Type;
528 template<
typename VT1,
typename VT2,
typename VT3 >
534 typedef typename SelectType< IsDenseVector<VT1>::value && IsTransposeVector<VT1>::value &&
535 IsSparseVector<VT2>::value && IsTransposeVector<VT2>::value &&
536 IsDenseVector<VT3>::value && IsTransposeVector<VT3>::value
537 ,
typename TDVecTSVecAddExprTrait< typename TDVecTDVecAddExprTrait<VT1,VT3>::Type, VT2 >::Type
538 , INVALID_TYPE >::Type Type;
548 template<
typename VT1,
typename VT2,
typename VT3 >
554 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
555 IsSparseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
556 IsDenseVector<VT3>::value && !IsTransposeVector<VT3>::value
557 ,
typename DVecSVecAddExprTrait< typename DVecDVecSubExprTrait<VT1,VT3>::Type, VT2 >::Type
558 , INVALID_TYPE >::Type Type;
568 template<
typename VT1,
typename VT2,
typename VT3 >
574 typedef typename SelectType< IsDenseVector<VT1>::value && IsTransposeVector<VT1>::value &&
575 IsSparseVector<VT2>::value && IsTransposeVector<VT2>::value &&
576 IsDenseVector<VT3>::value && IsTransposeVector<VT3>::value
577 ,
typename TDVecTSVecAddExprTrait< typename TDVecTDVecSubExprTrait<VT1,VT3>::Type, VT2 >::Type
578 , INVALID_TYPE >::Type Type;