VecX& operator-=(vector_expression<VecX, Device>& x, vector_expression<VecV, Device> const& v){ ABLAS_SIZE_CHECK(x().size() == v().size()); typedef typename vector_temporary<VecX>::type Temporary; system::scheduler().create_closure( Temporary(v.size()), [&x, &v](Temporary& temporary){ assign(temporary,v); plus_assign(x,temporary,typename VecX::value_type(-1)); } ); return x(); }
MatA& operator-=( matrix_expression<MatA, Device>& A, matrix_expression<MatB, Device> const& B ){ ABLAS_SIZE_CHECK(A().size1() == B().size1()); ABLAS_SIZE_CHECK(A().size2() == B().size2()); typedef typename matrix_temporary<MatA>::type Temporary; system::scheduler().create_closure( Temporary(A.size1(),A.size2()), [&A, &B](Temporary& temporary){ assign(temporary,B); plus_assign(A,temporary, typename MatA::value_type(-1)); } ); return A(); }
closure_type &operator+= (const E &e) { plus_assign(m_lval, e); return m_lval; }
MatA& operator+=(matrix_expression<MatA>& A, matrix_expression<MatB> const& B){ SIZE_CHECK(A().size1() == B().size1()); SIZE_CHECK(A().size2() == B().size2()); typename matrix_temporary<MatA>::type temporary(B); return plus_assign(A,temporary); }
VecX& operator+=(vector_expression<VecX>& x, vector_expression<VecV> const& v){ SIZE_CHECK(x().size() == v().size()); typename vector_temporary<VecX>::type temporary(v); return plus_assign(x,temporary); }
vector &operator += (const vector_container<C> &v) { plus_assign(v); return *this; }