22 #ifndef _BLAZE_MATH_EXPRESSIONS_TDVECSMATMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_TDVECSMATMULTEXPR_H_
31 #include <boost/type_traits/remove_reference.hpp>
80 typedef typename VT::ResultType
VRT;
81 typedef typename MT::ResultType
MRT;
82 typedef typename VT::CompositeType
VCT;
83 typedef typename MT::CompositeType
MCT;
110 enum { vectorizable = 0 };
139 if(
vec_.size() != 0UL ) {
141 for(
size_t i=1UL; i<
vec_.size(); ++i ) {
159 return mat_.columns();
189 template<
typename T >
215 template<
typename VT2 >
221 if( rhs.
mat_.rows() == 0UL ) {
234 for(
size_t i=0; i<(~lhs).
size(); ++i ) {
235 (~lhs)[i] = x[0UL] * A(0UL,i);
236 for(
size_t j=1UL; j<x.size(); ++j ) {
237 (~lhs)[i] += x[j] * A(j,i);
255 template<
typename VT2 >
261 typedef typename boost::remove_reference<RT>::type::ConstIterator ConstIterator;
263 if( rhs.
mat_.rows() == 0UL ) {
278 for(
size_t i=0UL; i<x.size(); ++i ) {
279 const ConstIterator end( A.end(i) );
280 ConstIterator element( A.begin(i) );
281 for( ; element!=end; ++element ) {
282 (~lhs)[element->index()] += x[i] * element->value();
298 template<
typename VT2 >
323 template<
typename VT2 >
328 typedef typename boost::remove_reference<RT>::type::ConstIterator ConstIterator;
330 if( rhs.
mat_.rows() == 0UL ) {
342 for(
size_t i=0UL; i<x.size(); ++i ) {
343 const ConstIterator end( A.end(i) );
344 ConstIterator element( A.begin(i) );
345 for( ; element!=end; ++element ) {
346 (~lhs)[element->index()] += x[i] * element->value();
367 template<
typename VT2 >
372 typedef typename boost::remove_reference<RT>::type::ConstIterator ConstIterator;
374 if( rhs.
mat_.rows() == 0UL ) {
386 for(
size_t i=0UL; i<x.size(); ++i ) {
387 const ConstIterator end( A.end(i) );
388 ConstIterator element( A.begin(i) );
389 for( ; element!=end; ++element ) {
390 (~lhs)[element->index()] -= x[i] * element->value();
411 template<
typename VT2 >
480 template<
typename T1
485 if( (~vec).size() != (~mat).
rows() )
486 throw std::invalid_argument(
"Vector and matrix sizes do not match" );
514 template<
typename T1
517 inline const typename EnableIf< IsMatMatMultExpr<T2>, MultExprTrait<T1,T2> >::Type::Type
520 return ( vec * (~mat).leftOperand() ) * (~mat).rightOperand();