22 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECSVECMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_DVECSVECMULTEXPR_H_
32 #include <boost/type_traits/remove_reference.hpp>
68 template<
typename VT1
77 typedef typename VT1::ResultType
RT1;
78 typedef typename VT2::ResultType
RT2;
79 typedef typename VT1::ReturnType
RN1;
80 typedef typename VT2::ReturnType
RN2;
81 typedef typename VT1::CompositeType
CT1;
82 typedef typename VT2::CompositeType
CT2;
83 typedef typename VT1::TransposeType
TT1;
84 typedef typename VT2::TransposeType
TT2;
112 template<
typename VT >
114 enum { value = useAssign };
155 typedef typename boost::remove_reference<RightOperand>::type::ConstIterator
IteratorType;
334 return rhs_.nonZeros();
364 template<
typename T >
391 template<
typename VT >
397 typedef typename boost::remove_reference<CT2>::type::ConstIterator
ConstIterator;
406 for( ConstIterator element=y.begin(); element!=y.end(); ++element )
407 (~lhs)[element->index()] = x[element->index()] * element->value();
426 template<
typename VT >
432 typedef typename boost::remove_reference<CT2>::type::ConstIterator ConstIterator;
441 for( ConstIterator element=y.begin(); element!=y.end(); ++element )
442 (~lhs).append( element->index(), x[element->index()] * element->value() );
461 template<
typename VT >
462 friend inline typename EnableIf< UseAssign<VT> >::Type
467 typedef typename boost::remove_reference<CT2>::type::ConstIterator ConstIterator;
476 for( ConstIterator element=y.begin(); element!=y.end(); ++element )
477 (~lhs)[element->index()] += x[element->index()] * element->value();
500 template<
typename VT >
501 friend inline typename EnableIf< UseAssign<VT> >::Type
506 typedef typename boost::remove_reference<CT2>::type::ConstIterator ConstIterator;
515 for( ConstIterator element=y.begin(); element!=y.end(); ++element )
516 (~lhs)[element->index()] -= x[element->index()] * element->value();
539 template<
typename VT >
540 friend inline typename EnableIf< UseAssign<VT> >::Type
545 typedef typename boost::remove_reference<CT2>::type::ConstIterator ConstIterator;
554 const ConstIterator
end( y.end() );
555 ConstIterator
begin( y.begin() );
560 for( ; i<index; ++i )
566 for( ; i<(~lhs).
size(); ++i )
623 template<
typename T1
626 inline const DVecSVecMultExpr<T1,T2,TF>
629 if( (~lhs).
size() != (~rhs).
size() )
630 throw std::invalid_argument(
"Vector sizes do not match" );