22 #ifndef _BLAZE_MATH_EXPRESSIONS_TSMATDVECMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_TSMATDVECMULTEXPR_H_
31 #include <boost/type_traits/remove_reference.hpp>
80 typedef typename MT::ResultType
MRT;
81 typedef typename VT::ResultType
VRT;
82 typedef typename MT::CompositeType
MCT;
83 typedef typename VT::CompositeType
VCT;
110 enum { vectorizable = 0 };
142 if(
vec_.size() > 0UL ) {
144 for(
size_t j=1UL; j<
vec_.size(); ++j )
191 template<
typename T >
219 template<
typename VT1 >
225 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
229 if( rhs.
mat_.columns() == 0UL )
return;
239 for(
size_t j=0UL; j<A.columns(); ++j )
241 ConstIterator element( A.begin(j) );
242 const ConstIterator end( A.end(j) );
244 for( ; element!=end; ++element ) {
245 if(
isDefault( (~lhs)[element->index()] ) )
246 (~lhs)[element->index()] = element->value() * x[j];
248 (~lhs)[element->index()] += element->value() * x[j];
269 template<
typename VT1 >
275 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
279 if( rhs.
mat_.columns() == 0UL )
return;
289 for(
size_t j=0UL; j<A.columns(); ++j )
291 ConstIterator element( A.begin(j) );
292 const ConstIterator end( A.end(j) );
294 for( ; element!=end; ++element ) {
295 (~lhs)[element->index()] += element->value() * x[j];
314 template<
typename VT1 >
344 template<
typename VT1 >
349 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
351 if( rhs.mat_.columns() == 0UL )
return;
361 for(
size_t j=0UL; j<A.columns(); ++j )
363 ConstIterator element( A.begin(j) );
364 const ConstIterator end( A.end(j) );
366 for( ; element!=end; ++element ) {
367 (~lhs)[element->index()] += element->value() * x[j];
393 template<
typename VT1 >
398 typedef typename boost::remove_reference<LT>::type::ConstIterator ConstIterator;
400 if( rhs.mat_.columns() == 0UL )
return;
410 for(
size_t j=0UL; j<A.columns(); ++j )
412 ConstIterator element( A.begin(j) );
413 const ConstIterator end( A.end(j) );
415 for( ; element!=end; ++element ) {
416 (~lhs)[element->index()] -= element->value() * x[j];
442 template<
typename VT1 >
512 template<
typename T1
517 if( (~mat).
columns() != (~vec).size() )
518 throw std::invalid_argument(
"Matrix and vector sizes do not match" );