22 #ifndef _BLAZE_MATH_EXPRESSIONS_SVECDVECMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_SVECDVECMULTEXPR_H_
32 #include <boost/type_traits/remove_reference.hpp>
67 template<
typename VT1
76 typedef typename VT1::ResultType
RT1;
77 typedef typename VT2::ResultType
RT2;
78 typedef typename VT1::ReturnType
RN1;
79 typedef typename VT2::ReturnType
RN2;
80 typedef typename VT1::CompositeType
CT1;
81 typedef typename VT2::CompositeType
CT2;
82 typedef typename VT1::TransposeType
TT1;
83 typedef typename VT2::TransposeType
TT2;
111 template<
typename VT >
113 enum { value = useAssign };
154 typedef typename boost::remove_reference<LeftOperand>::type::ConstIterator
IteratorType;
333 return lhs_.nonZeros();
363 template<
typename T >
390 template<
typename VT >
396 typedef typename boost::remove_reference<CT1>::type::ConstIterator
ConstIterator;
405 for( ConstIterator element=x.begin(); element!=x.end(); ++element )
406 (~lhs)[element->index()] = element->value() * y[element->index()];
425 template<
typename VT >
431 typedef typename boost::remove_reference<CT1>::type::ConstIterator ConstIterator;
440 for( ConstIterator element=x.begin(); element!=x.end(); ++element )
441 (~lhs).append( element->index(), element->value() * y[element->index()] );
460 template<
typename VT >
461 friend inline typename EnableIf< UseAssign<VT> >::Type
466 typedef typename boost::remove_reference<CT1>::type::ConstIterator ConstIterator;
475 for( ConstIterator element=x.begin(); element!=x.end(); ++element )
476 (~lhs)[element->index()] += element->value() * y[element->index()];
499 template<
typename VT >
500 friend inline typename EnableIf< UseAssign<VT> >::Type
505 typedef typename boost::remove_reference<CT1>::type::ConstIterator ConstIterator;
514 for( ConstIterator element=x.begin(); element!=x.end(); ++element )
515 (~lhs)[element->index()] -= element->value() * y[element->index()];
538 template<
typename VT >
539 friend inline typename EnableIf< UseAssign<VT> >::Type
544 typedef typename boost::remove_reference<CT1>::type::ConstIterator ConstIterator;
553 const ConstIterator
end( x.end() );
554 ConstIterator
begin( x.begin() );
559 for( ; i<index; ++i )
565 for( ; i<rhs.size(); ++i )
622 template<
typename T1
628 if( (~lhs).
size() != (~rhs).
size() )
629 throw std::invalid_argument(
"Vector sizes do not match" );