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 };
188 template<
typename T >
191 (
rhs_.canAlias( alias ) );
201 template<
typename T >
203 return (
lhs_.isAliased( alias ) ||
rhs_.isAliased( alias ) );
225 template<
typename VT >
255 template<
typename VT >
284 template<
typename VT >
313 template<
typename VT >
342 template<
typename VT >
409 template<
typename T1
412 inline const DVecSVecAddExpr<T1,T2,TF>
417 if( (~lhs).size() != (~rhs).size() )
418 throw std::invalid_argument(
"Vector sizes do not match" );
451 template<
typename T1
454 inline const DVecSVecAddExpr<T2,T1,TF>
459 if( (~lhs).size() != (~rhs).size() )
460 throw std::invalid_argument(
"Vector sizes do not match" );
488 template<
typename T1
492 inline const typename AddExprTrait< DVecSVecAddExpr<T1,T2,TF>, T3 >::Type
493 operator+(
const DVecSVecAddExpr<T1,T2,TF>& lhs,
const DenseVector<T3,TF>& rhs )
497 return ( lhs.leftOperand() + (~rhs) ) + lhs.rightOperand();
516 template<
typename T1
520 inline const typename SubExprTrait< DVecSVecAddExpr<T1,T2,TF>, T3 >::Type
521 operator-(
const DVecSVecAddExpr<T1,T2,TF>& lhs,
const DenseVector<T3,TF>& rhs )
525 return ( lhs.leftOperand() - (~rhs) ) + lhs.rightOperand();
541 template<
typename VT1,
typename VT2,
typename VT3 >
542 struct DVecDVecAddExprTrait< DVecSVecAddExpr<VT1,VT2,false>, VT3 >
547 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
548 IsSparseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
549 IsDenseVector<VT3>::value && !IsTransposeVector<VT3>::value
550 ,
typename DVecSVecAddExprTrait< typename DVecDVecAddExprTrait<VT1,VT3>::Type, VT2 >::Type
551 , INVALID_TYPE >::Type Type;
561 template<
typename VT1,
typename VT2,
typename VT3 >
562 struct TDVecTDVecAddExprTrait< DVecSVecAddExpr<VT1,VT2,true>, VT3 >
567 typedef typename SelectType< IsDenseVector<VT1>::value && IsTransposeVector<VT1>::value &&
568 IsSparseVector<VT2>::value && IsTransposeVector<VT2>::value &&
569 IsDenseVector<VT3>::value && IsTransposeVector<VT3>::value
570 ,
typename TDVecTSVecAddExprTrait< typename TDVecTDVecAddExprTrait<VT1,VT3>::Type, VT2 >::Type
571 , INVALID_TYPE >::Type Type;
581 template<
typename VT1,
typename VT2,
typename VT3 >
582 struct DVecDVecSubExprTrait< DVecSVecAddExpr<VT1,VT2,false>, VT3 >
587 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
588 IsSparseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
589 IsDenseVector<VT3>::value && !IsTransposeVector<VT3>::value
590 ,
typename DVecSVecAddExprTrait< typename DVecDVecSubExprTrait<VT1,VT3>::Type, VT2 >::Type
591 , INVALID_TYPE >::Type Type;
601 template<
typename VT1,
typename VT2,
typename VT3 >
602 struct TDVecTDVecSubExprTrait< DVecSVecAddExpr<VT1,VT2,true>, VT3 >
607 typedef typename SelectType< IsDenseVector<VT1>::value && IsTransposeVector<VT1>::value &&
608 IsSparseVector<VT2>::value && IsTransposeVector<VT2>::value &&
609 IsDenseVector<VT3>::value && IsTransposeVector<VT3>::value
610 ,
typename TDVecTSVecAddExprTrait< typename TDVecTDVecSubExprTrait<VT1,VT3>::Type, VT2 >::Type
611 , INVALID_TYPE >::Type Type;