22 #ifndef _BLAZE_MATH_EXPRESSIONS_SVECTDVECMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_SVECTDVECMULTEXPR_H_
31 #include <boost/type_traits/remove_reference.hpp>
69 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::ElementType
ET1;
84 typedef typename VT2::ElementType
ET2;
113 template<
typename MT >
115 enum { value = useAssign };
163 typedef typename boost::remove_reference<LeftOperand>::type::ConstIterator
IteratorType;
228 return it_->value() *
v_;
358 return lhs_.nonZeros() *
rhs_.size();
369 return lhs_.nonZeros();
399 template<
typename T >
424 template<
typename MT >
430 typedef typename boost::remove_reference<LT>::type::ConstIterator
ConstIterator;
440 const ConstIterator
end( x.end() );
442 for( ConstIterator element=x.begin(); element!=
end; ++element ) {
444 for(
size_t i=0UL; i<y.size(); ++i ) {
445 (~lhs)(element->index(),i) = element->
value() * y[i];
469 template<
typename MT >
476 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
486 const ConstIterator
end( x.end() );
488 for(
size_t i=0UL; i<y.size(); ++i ) {
490 for( ConstIterator element=x.begin(); element!=
end; ++element ) {
491 (~lhs)(element->index(),i) = element->
value() * y[i];
511 template<
typename MT >
517 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
527 const ConstIterator
end( x.end() );
529 for( ConstIterator element=x.begin(); element!=
end; ++element ) {
531 (~lhs).reserve( element->index(), y.size() );
532 for(
size_t i=0UL; i<y.size(); ++i ) {
533 (~lhs).append( element->index(), i, element->value() * y[i] );
557 template<
typename MT >
558 friend inline typename EnableIf< UseAssign<MT> >::Type
564 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
574 const ConstIterator
end( x.end() );
576 for(
size_t i=0UL; i<y.size(); ++i ) {
578 (~lhs).reserve( i, x.nonZeros() );
579 for( ConstIterator element=x.begin(); element!=
end; ++element ) {
580 (~lhs).append( element->index(), i, element->value() * y[i] );
601 template<
typename MT >
607 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
617 const ConstIterator
end( x.end() );
619 for( ConstIterator element=x.begin(); element!=
end; ++element ) {
621 for(
size_t i=0UL; i<y.size(); ++i ) {
622 (~lhs)(element->index(),i) += element->
value() * y[i];
646 template<
typename MT >
647 friend inline typename EnableIf< UseAssign<MT> >::Type
653 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
663 const ConstIterator
end( x.end() );
665 for(
size_t i=0UL; i<y.size(); ++i ) {
667 for( ConstIterator element=x.begin(); element!=
end; ++element ) {
668 (~lhs)(element->index(),i) += element->
value() * y[i];
693 template<
typename MT >
699 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
709 const ConstIterator
end( x.end() );
711 for( ConstIterator element=x.begin(); element!=
end; ++element ) {
713 for(
size_t i=0UL; i<y.size(); ++i ) {
714 (~lhs)(element->index(),i) -= element->
value() * y[i];
738 template<
typename MT >
739 friend inline typename EnableIf< UseAssign<MT> >::Type
745 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
755 const ConstIterator
end( x.end() );
757 for(
size_t i=0UL; i<y.size(); ++i ) {
759 for( ConstIterator element=x.begin(); element!=
end; ++element ) {
760 (~lhs)(element->index(),i) -= element->
value() * y[i];
829 template<
typename T1