22 #ifndef _BLAZE_MATH_EXPRESSIONS_TDMATSVECMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_TDMATSVECMULTEXPR_H_
31 #include <boost/type_traits/remove_reference.hpp>
78 typedef typename MT::ResultType
MRT;
79 typedef typename VT::ResultType
VRT;
80 typedef typename MT::CompositeType
MCT;
81 typedef typename VT::CompositeType
VCT;
100 typedef typename MT::CompositeType
LT;
108 enum { vectorizable = 0 };
137 typedef typename boost::remove_reference<VCT>::type::ConstIterator ConstIterator;
143 ConstIterator element( x.begin() );
146 if( element != x.end() ) {
147 res =
mat_( index, element->index() ) * element->value();
149 for( ; element!=x.end(); ++element )
150 res +=
mat_( index, element->index() ) * element->value();
196 template<
typename T >
221 template<
typename VT1 >
226 typedef typename boost::remove_reference<RT>::type::ConstIterator ConstIterator;
230 if( x.nonZeros() == 0UL ) {
245 ConstIterator element( x.begin() );
246 const ConstIterator end( x.end() );
248 for(
size_t i=0UL; i<A.rows(); ++i )
249 (~lhs)[i] = A(i,element->index()) * element->value();
252 while( element != end ) {
253 for(
size_t i=0UL; i<A.rows(); ++i )
254 (~lhs)[i] += A(i,element->index()) * element->value();
276 template<
typename VT1 >
306 template<
typename VT1 >
311 typedef typename boost::remove_reference<RT>::type::ConstIterator ConstIterator;
315 if( x.nonZeros() == 0UL )
return;
327 ConstIterator element( x.begin() );
328 const ConstIterator end( x.end() );
330 while( element != end ) {
331 for(
size_t i=0UL; i<A.rows(); ++i )
332 (~lhs)[i] += A(i,element->index()) * element->value();
358 template<
typename VT1 >
363 typedef typename boost::remove_reference<RT>::type::ConstIterator ConstIterator;
367 if( x.nonZeros() == 0UL )
return;
379 ConstIterator element( x.begin() );
380 const ConstIterator end( x.end() );
382 while( element != end ) {
383 for(
size_t i=0UL; i<A.rows(); ++i )
384 (~lhs)[i] -= A(i,element->index()) * element->value();
410 template<
typename VT1 >
481 template<
typename T1
486 if( (~mat).
columns() != (~vec).size() )
487 throw std::invalid_argument(
"Matrix and vector sizes do not match" );