On Tue, Jul 27, 2010 at 11:11 AM, Andy Somogyi <somogyie@umail.iu.edu> wrote:
Hello All

I frequently work where an external routine gives me a block of memory that I need to access as a 2 dimensional matrix (row-major). 

I've written a 'matrix-view' class attached below. I plan on just reading and writing to the memory block (that I don't own) using this view class. I've tested it with a variety of test cases (reading, writing, assigning to and from other matrices), and have not come into any problems. Would you guys care to take a look at this class, and let me know if there are any potential problems with this design, and I think a class like this would be of great utility to boost, any possibilities of submitting it?

thanks.



namespace boost { namespace numeric { namespace ublas {

template<class T, class L=row_major >
/**
* a temporary 'view' of an existing 2-dimensional block of 
* memory. 
*/
class matrix_view : public matrix<T, L, shallow_array_adaptor<T> > {
typedef typename  shallow_array_adaptor<T>::size_type size_type;
typedef matrix<T, L, shallow_array_adaptor<T> >  base_type;
public:
/**
 * create a matrix_view that is a view of an existing block of data. 
 * the matrix_view does NOT own the given pointer, user is responsible 
 * for making sure that this class is not used after the p_data 
 * block has been freed. 
 */
matrix_view (size_type size1, size_type size2, T* p_data) :
base_type(size1, size2, shallow_array_adaptor<T>(size1*size2, p_data)) {};

private:
/**
 * hide ctors of base class, can only have a matrix_view that is attached to
 * an existing block of data.
 */
matrix_view() {};
matrix_view(size_type size1, size_type size2) {};
};
}}};

// example of use, assign identity matrix to given data block, 
// assuming rows == columns.
void myFunc(int rows, int columns, double* pData) {
matrix_view<double> mv(rows,colums,pData);
identity_matrix<double> i(rows);
mv = i; // the data block referenced by pData is now initialized to the identity matrix. 
}




_______________________________________________
ublas mailing list
ublas@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/ublas
Sent to: asadchev@gmail.com

looks very similar to:
http://www.guwi17.de/ublas/examples/storage_adaptors.hpp