Wouldn't changing vectors' operator = allow that?
From:
BOOST_UBLAS_INLINE
vector &operator = (const vector &v) {
data () = v.data ();
return *this;
}
to
// pass by value for move semantics
BOOST_UBLAS_INLINE
vector &operator = (vector v) {
data().swap(v.data());
return *this;
}
and maybe add some checks depending on storage type.
On Fri, 2009-08-28 at 08:24 -0400, Jesse Perla wrote:
Hi there,
> I am writing many routines where I would strongly prefer: matrix<double> f(const matrix<double>& in) to void f(const matrix<double>& in, matrix<double>& out )
> There has been a lot of discussion about this from the C++ groups:
> The move library to support this in C++03
> * http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
> * Also, I see that this is native to MTL: http://www.osl.iu.edu/research/mtl/mtl4/doc/matrix_assignment.html#move_semantics
>
> I don't understand expression templates well enough to know the current state in ublas, but is it possible to return large matrices in this way? For example, if I took the following code: http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?LU_Matrix_Inversion and had it return a matrix instead, would that give overhead for large matrices?
> Could I even nest it with no overhead in other vector expressions: e.g.
> matrix<double> C, B; //setup. Assume they are very large
> matrix<double> A = inv(B) + C;
>
> If this pattern is not usable yet, any idea of when it would be?
>
> Thanks,
> Jesse
>
> _______________________________________________
> ublas mailing list
> ublas@lists.boost.org
> http://lists.boost.org/mailman/listinfo.cgi/ublas
Windows Live: Make it easier for your friends to see what you’re up to on Facebook. Find out more.