Boost logo

Ublas :

Subject: Re: [ublas] [bindings][lapack] Initial high-level solve
From: Rutger ter Borg (rutger_at_[hidden])
Date: 2009-03-25 04:07:34


Rutger ter Borg wrote:
>
> I have thought about this, I guess this would become feasible if stuff
> mentioned in http://lists.boost.org/MailArchives/ublas/2009/03/3367.php is
> implemented. I.e., if is_bindable_vector<T> is a true_type, we could use
> an alternative traits implementation or dispatch (or something along that
> line). This would enable us to use a vector as if it is a matrix in a
> transparent way.
>

What could be done, is writing a matrix traits on the basis of vector
traits, something like

matrix_traits< T, enable_if<...L> >

matrix_traits< T, enable_if< is_bindable_vector< T > >::type >:
  vector_as_matrix< T, remove_const<T> >

matrix_traits< T, enable_if< is_bindable_matrix< T > >::type >:
  matrix_detail_traits< T, remove_const<T> >

template< typename T, typename M >
vector_as_matrix {

   ...

   static pointer storage( matrix_type& m ) {
      return vector_traits<T>::storage( m );
   }
   static ptrdiff_t num_columns( matrix_type& m ) {
      return 1;
   }
   static ptrdiff_t num_rows( matrix_type& m ) {
      return vector_traits<T>::size( m );
   }

   ...
}

and then, all bindable_vectors would be addressable as Mx1 matrices, adding
trans would give 1xN.

Cheers,

Rutger