22 #ifndef _BLAZE_MATH_EXPRESSIONS_TSVECSVECMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_TSVECSVECMULTEXPR_H_
78 inline const typename MultTrait<typename T1::ElementType,typename T2::ElementType>::Type
83 typedef typename T1::CompositeType Lhs;
84 typedef typename T2::CompositeType Rhs;
87 typedef typename X1::ElementType E1;
88 typedef typename X2::ElementType E2;
90 typedef typename X1::ConstIterator LeftIterator;
91 typedef typename X2::ConstIterator RightIterator;
98 if( (~lhs).size() != (~rhs).size() )
99 throw std::invalid_argument(
"Vector sizes do not match" );
101 if( (~lhs).nonZeros() == 0UL || (~rhs).nonZeros() == 0UL )
return MultType();
105 const LeftIterator lend( left.end() );
106 const RightIterator rend( right.end() );
107 LeftIterator l( left.begin() );
108 RightIterator r( right.begin() );
109 MultType sp = MultType();
111 for( ; l!=lend && r!=rend; ++l ) {
112 while( r->index() < l->index() && ++r != rend ) {}
113 if( r!=rend && l->index() == r->index() ) {
114 sp = l->value() * r->value();
120 for( ; l!=lend && r!=rend; ++l ) {
121 while( r->index() < l->index() && ++r != rend ) {}
122 if( r!=rend && l->index() == r->index() ) {
123 sp += l->value() * r->value();