
Ublas : 
Subject: [ublas] [bindings] New traits system
From: Rutger ter Borg (rutger_at_[hidden])
Date: 20091127 04:03:17
Dear all,
Herewith some news surrounding the numeric_bindings. I've rewritten the
traits part from the ground up, with simplicity, flexibility and efficiency
in mind.
Most notable differences:
* Full MPLcompatible support for static matrices and vectors, for all the
compiletimejunkies out there.
* No more separate matrix and vector trait classes, all through one adaptor
* Builtin automatic reinterpretations (matrix>vector, vector>matrix,
scalar>matrix (!), etc.) for all objects
* Proxies and views through metaadaptors, e.g., row(), column(), trans(),
upper(), lower()
* Compiletime selected iterators (so far, linear data structures only,
triangular and yale sparse to come)
* IO support; pretty printing (will give nice output for all bindable
objects)
* Easier directory structure (std/vector.hpp, ublas/vector.hpp, etc.).
Directory name is the most specific namespacename of the object, filename
is the lowercased name of the object.
* Support for C arrays, standard vectors, uBLAS, TNT, eigen2, more to be
added such as glas and mtl4
Some examples of what's possible:
double a[5][10];
std::cout << column( a, 0 ) << std::endl;
std::sort( begin( row( a, 2 ) ), end( row( a, 2 ) ) );
std::cout << result_of::num_rows<double[5][10]>::type::value << std::endl;
for( result_of::begin< T, 1 >::type i = begin< 1 >( t ); i != end< 1 >( t );
++i ) {
}
some bits are still a bit rough, but hopefully you're getting the idea. And,
of course, what drives all this, is the userfriendliness of calls to blas
and lapack. The goal is to be able to do
blas::some_op( trans( a ), row( b, 2 ) );
for any matrix and/or vector object. I would like to push this towards a
first kind of official RFC. I you're interested in the effort of getting a
(the second) stable version of numeric_bindings out of the door, please
don't hestitate to get involved.
Thanks!
Cheers,
Rutger