22 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECTDVECMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_DVECTDVECMULTEXPR_H_
67 template<
typename VT1
75 typedef typename VT1::ResultType
RT1;
76 typedef typename VT2::ResultType
RT2;
77 typedef typename VT1::ReturnType
RN1;
78 typedef typename VT2::ReturnType
RN2;
79 typedef typename VT1::CompositeType
CT1;
80 typedef typename VT2::CompositeType
CT2;
108 template<
typename VT >
110 enum { value = useAssign };
144 enum { vectorizable = 0 };
223 template<
typename T >
250 template<
typename MT >
265 const size_t m( (~lhs).
rows() );
266 const size_t n( (~lhs).
columns() );
269 const size_t jend( n &
size_t(-2) );
271 for(
size_t i=0UL; i<m; ++i ) {
272 for(
size_t j=0UL; j<jend; j+=2UL ) {
273 (~lhs)(i,j ) = x[i] * y[j ];
274 (~lhs)(i,j+1UL) = x[i] * y[j+1];
277 (~lhs)(i,jend) = x[i] * y[jend];
296 template<
typename MT >
310 const size_t m( (~lhs).
rows() );
311 const size_t n( (~lhs).
columns() );
314 const size_t iend( m &
size_t(-2) );
316 for(
size_t j=0UL; j<n; ++j ) {
317 for(
size_t i=0UL; i<iend; i+=2UL ) {
318 (~lhs)(i ,j) = x[i ] * y[j];
319 (~lhs)(i+1UL,j) = x[i+1] * y[j];
322 (~lhs)(iend,j) = x[iend] * y[j];
341 template<
typename MT
345 typedef typename SelectType< SO, OppositeType, ResultType >::Type TmpType;
357 const TmpType tmp( rhs );
378 template<
typename MT >
379 friend inline typename EnableIf< UseAssign<MT> >::Type
393 const size_t m( (~lhs).
rows() );
394 const size_t n( (~lhs).
columns() );
397 const size_t jend( n &
size_t(-2) );
399 for(
size_t i=0UL; i<m; ++i ) {
400 for(
size_t j=0UL; j<jend; j+=2UL ) {
401 (~lhs)(i,j ) += x[i] * y[j ];
402 (~lhs)(i,j+1UL) += x[i] * y[j+1UL];
405 (~lhs)(i,jend) += x[i] * y[jend];
425 template<
typename MT >
439 const size_t m( (~lhs).
rows() );
440 const size_t n( (~lhs).
columns() );
443 const size_t iend( m &
size_t(-2) );
445 for(
size_t j=0UL; j<n; ++j ) {
446 for(
size_t i=0UL; i<iend; i+=2UL ) {
447 (~lhs)(i ,j) += x[i ] * y[j];
448 (~lhs)(i+1UL,j) += x[i+1UL] * y[j];
451 (~lhs)(iend,j) += x[iend] * y[j];
477 template<
typename MT >
478 friend inline typename EnableIf< UseAssign<MT> >::Type
492 const size_t m( (~lhs).
rows() );
493 const size_t n( (~lhs).
columns() );
496 const size_t jend( n &
size_t(-2) );
498 for(
size_t i=0UL; i<m; ++i ) {
499 for(
size_t j=0UL; j<jend; j+=2UL ) {
500 (~lhs)(i,j ) -= x[i] * y[j ];
501 (~lhs)(i,j+1UL) -= x[i] * y[j+1UL];
504 (~lhs)(i,jend) -= x[i] * y[jend];
524 template<
typename MT >
538 const size_t m( (~lhs).
rows() );
539 const size_t n( (~lhs).
columns() );
542 const size_t iend( m &
size_t(-2) );
544 for(
size_t j=0UL; j<n; ++j ) {
545 for(
size_t i=0UL; i<iend; i+=2UL ) {
546 (~lhs)(i ,j) -= x[i ] * y[j];
547 (~lhs)(i+1UL,j) -= x[i+1UL] * y[j];
550 (~lhs)(iend,j) -= x[iend] * y[j];
616 template<
typename T1
618 inline const DVecTDVecMultExpr<T1,T2>