$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Edward Grace (ej.grace_at_[hidden])
Date: 2006-11-07 05:17:05
Dear All,
Is it possible to adapt e.g. a pointer to double in to a  
ublas::matrix<double>, or construct a matrix from a pointer to double?
I have used the Blitz++ libraries, with those it is possible to use  
storage allocated elsewhere.
This is to allow the painless interface of my code with legacy C  
code.  I would like to do something like the following:
using namespace boost::numeric::ublas;
double *p;
p = new double[100];
.... Fill p[*]  with data
// Construct a 10x10 matrix using externally allocated storage.
matrix<double> A(10,10,p);
There does appear to be a hint that I can use my own allocator, but  
it is far from clear how I go about doing this. For example coming up  
with an Allocator function that doesn't allocate but instead uses  
existing memory.
class MyAllocator : public GeneralAllocator {
        double *TheMemory;
public:
        MyAllocator(double *p) {
                TheMemory = p;
           }
        allocate() {}
};
matrix<double,MyAllocator> A;
Failing that, I'd like an adaptor that allows me to effectively do  
something like:
matrix<double> A;
double *p;
// Allocate p and fill with stuff!
A = adaptor<matrix<double> >(p,nCol,nRows);
A is now a 10x10 matrix<double> using the memory pointed to by p.
Obviously there are issues regarding who is now responsible for this  
memory, something handled by the memory policy in Blitz++  
(neverDelete, etc).
Help!! Is there a way to do this?
-ed