22 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATTDMATADDEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_DMATTDMATADDEXPR_H_
63 template<
typename MT1
71 typedef typename MT1::ResultType
RT1;
72 typedef typename MT2::ResultType
RT2;
73 typedef typename MT1::ReturnType
RN1;
74 typedef typename MT2::ReturnType
RN2;
75 typedef typename MT1::CompositeType
CT1;
76 typedef typename MT2::CompositeType
CT2;
115 enum { vectorizable = 0 };
166 return lhs_.columns();
196 template<
typename T >
221 template<
typename MT
232 const size_t m( rhs.
rows() );
233 const size_t n( rhs.
columns() );
234 const size_t block( 16UL );
236 for(
size_t ii=0UL; ii<m; ii+=block ) {
237 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
238 for(
size_t jj=0UL; jj<n; jj+=block ) {
239 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
240 for(
size_t i=ii; i<iend; ++i ) {
241 for(
size_t j=jj; j<jend; ++j ) {
242 (~lhs)(i,j) = rhs.
lhs_(i,j) + rhs.
rhs_(i,j);
278 template<
typename MT
294 const TmpType tmp( rhs );
312 template<
typename MT
321 if( !RequiresEvaluation<MT1>::value && !RequiresEvaluation<MT2>::value )
323 const size_t m( rhs.rows() );
324 const size_t n( rhs.columns() );
325 const size_t block( 16UL );
327 for(
size_t ii=0UL; ii<m; ii+=block ) {
328 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
329 for(
size_t jj=0UL; jj<n; jj+=block ) {
330 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
331 for(
size_t i=ii; i<iend; ++i ) {
332 for(
size_t j=jj; j<jend; ++j ) {
333 (~lhs)(i,j) += rhs.lhs_(i,j) + rhs.rhs_(i,j);
367 template<
typename MT
376 if( !RequiresEvaluation<MT1>::value && !RequiresEvaluation<MT2>::value )
378 const size_t m( rhs.rows() );
379 const size_t n( rhs.columns() );
380 const size_t block( 16UL );
382 for(
size_t ii=0UL; ii<m; ii+=block ) {
383 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
384 for(
size_t jj=0UL; jj<n; jj+=block ) {
385 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
386 for(
size_t i=ii; i<iend; ++i ) {
387 for(
size_t j=jj; j<jend; ++j ) {
388 (~lhs)(i,j) -= rhs.lhs_(i,j) + rhs.rhs_(i,j);
467 template<
typename T1
469 inline const DMatTDMatAddExpr<T1,T2>
473 throw std::invalid_argument(
"Matrix sizes do not match" );
509 template<
typename T1
511 inline const DMatTDMatAddExpr<T2,T1>
515 throw std::invalid_argument(
"Matrix sizes do not match" );