Hi,

On 6/6/07, Georg Baum <Georg.Baum@gmx.de> wrote:
Am Mittwoch, 6. Juni 2007 22:23 schrieb Server Levent Yilmaz:

> What is a proper way, if any, to adapt a ublas (dense) vector around a
> legacy pointer to data?

Something like this should work:

#include <boost/version.hpp>
#if BOOST_VERSION >= 103400
typedef boost::numeric::ublas::carray_adaptor<double> array_adaptor;
#else
typedef boost::numeric::ublas::array_adaptor<double> array_adaptor;
#endif
typedef vector<double, rcarray_adaptor> array_vector;


Replace double with the datatype you need. Then you can use array_vector
like this:

int n = 5;
double *array = new double[5];

array_vector v;
v.data().resize(n, array);


This is interesting (and obviously works, thank you).. Yet, I can not help but mention that the interface of array_adaptor is quite counter-intuitive. For instance the following :

array_vector v(n, array_adaptor(n,array))
;

ends up NOT using the adapted pointer but allocating its own space... Some reading of the source code reveals that array_adaptor is curiously trying to manage its own memory whenever it can (for example at copy construction)... Isn't that the job of unbounded_array? Isn't the whole purpose of array_adaptor is to delegate memory management _wholly_ to the user? (this is no rhetoric, really, what else is array_adaptor used for?)

And curiously asking if I may, why did carray_adaptor removed? (renamed?)

L.


--
Server Levent Yilmaz
Mechanical Engineering
University of Pittsburgh