Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r63008 - sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver
From: thomas.klimpel_at_[hidden]
Date: 2010-06-15 18:43:32


Author: klimpel
Date: 2010-06-15 18:43:32 EDT (Tue, 15 Jun 2010)
New Revision: 63008
URL: http://svn.boost.org/trac/boost/changeset/63008

Log:
regenerated gejsv.hpp (untested)
Text files modified:
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gejsv.hpp | 742 +++++++++++++++++++++++++++++++++++----
   1 files changed, 662 insertions(+), 80 deletions(-)

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gejsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gejsv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gejsv.hpp 2010-06-15 18:43:32 EDT (Tue, 15 Jun 2010)
@@ -96,37 +96,55 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
- template< typename MatrixA, typename SVA, typename U, typename V,
- typename WORK, typename IWORK >
+ template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename WORK, typename IWORK >
     static std::ptrdiff_t invoke( const char joba, const char jobu,
             const char jobv, const char jobr, const char jobt,
- const char jobp, MatrixA& a, const fortran_int_t lwork,
- detail::workspace5< SVA, U, V, WORK, IWORK > work ) {
+ const char jobp, MatrixA& a, VectorSVA& sva, MatrixU& u,
+ MatrixV& v, detail::workspace2< WORK, IWORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
         BOOST_STATIC_ASSERT( (bindings::is_column_major< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_column_major< MatrixU >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_column_major< MatrixV >::value) );
+ BOOST_STATIC_ASSERT( (boost::is_same< typename remove_const<
+ typename bindings::value_type< MatrixA >::type >::type,
+ typename remove_const< typename bindings::value_type<
+ VectorSVA >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (boost::is_same< typename remove_const<
+ typename bindings::value_type< MatrixA >::type >::type,
+ typename remove_const< typename bindings::value_type<
+ MatrixU >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (boost::is_same< typename remove_const<
+ typename bindings::value_type< MatrixA >::type >::type,
+ typename remove_const< typename bindings::value_type<
+ MatrixV >::type >::type >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorSVA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixU >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixV >::value) );
         BOOST_ASSERT( bindings::size(work.select(fortran_int_t())) >=
- min_size_iwork( $CALL_MIN_SIZE ));
+ min_size_iwork( bindings::size_row(a),
+ bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
- min_size_sva( $CALL_MIN_SIZE ));
- BOOST_ASSERT( bindings::size(work.select(real_type())) >=
- min_size_u( $CALL_MIN_SIZE ));
- BOOST_ASSERT( bindings::size(work.select(real_type())) >=
- min_size_v( $CALL_MIN_SIZE ));
- BOOST_ASSERT( bindings::size(work.select(real_type())) >=
- min_size_work( $CALL_MIN_SIZE ));
+ min_size_work( joba, jobu, jobv, bindings::size_row(a),
+ bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size_minor(a) == 1 ||
                 bindings::stride_minor(a) == 1 );
+ BOOST_ASSERT( bindings::size_minor(u) == 1 ||
+ bindings::stride_minor(u) == 1 );
+ BOOST_ASSERT( bindings::size_minor(v) == 1 ||
+ bindings::stride_minor(v) == 1 );
         BOOST_ASSERT( bindings::size_row(a) >= 0 );
         BOOST_ASSERT( bindings::stride_major(a) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(a)) );
         return detail::gejsv( joba, jobu, jobv, jobr, jobt, jobp,
                 bindings::size_row(a), bindings::size_column(a),
                 bindings::begin_value(a), bindings::stride_major(a),
+ bindings::begin_value(sva), bindings::begin_value(u),
+ bindings::stride_major(u), bindings::begin_value(v),
+ bindings::stride_major(v),
                 bindings::begin_value(work.select(real_type())),
- bindings::begin_value(u), bindings::stride_major(u),
- bindings::begin_value(v), bindings::stride_major(v),
- bindings::begin_value(work.select(real_type())), lwork,
+ bindings::size(work.select(real_type())),
                 bindings::begin_value(work.select(fortran_int_t())) );
     }
 
@@ -137,24 +155,21 @@
     // invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
- template< typename MatrixA >
+ template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
     static std::ptrdiff_t invoke( const char joba, const char jobu,
             const char jobv, const char jobr, const char jobt,
- const char jobp, MatrixA& a, const fortran_int_t lwork,
- minimal_workspace work ) {
+ const char jobp, MatrixA& a, VectorSVA& sva, MatrixU& u,
+ MatrixV& v, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
- bindings::detail::array<
- real_type > tmp_sva( min_size_sva( $CALL_MIN_SIZE ) );
- bindings::detail::array<
- real_type > tmp_u( min_size_u( $CALL_MIN_SIZE ) );
- bindings::detail::array<
- real_type > tmp_v( min_size_v( $CALL_MIN_SIZE ) );
- bindings::detail::array< real_type > tmp_work( min_size_work(
- $CALL_MIN_SIZE ) );
+ bindings::detail::array< real_type > tmp_work( min_size_work( joba,
+ jobu, jobv, bindings::size_row(a),
+ bindings::size_column(a) ) );
         bindings::detail::array< fortran_int_t > tmp_iwork(
- min_size_iwork( $CALL_MIN_SIZE ) );
- return invoke( joba, jobu, jobv, jobr, jobt, jobp, a, lwork,
- workspace( tmp_sva, tmp_u, tmp_v, tmp_work, tmp_iwork ) );
+ min_size_iwork( bindings::size_row(a),
+ bindings::size_column(a) ) );
+ return invoke( joba, jobu, jobv, jobr, jobt, jobp, a, sva, u, v,
+ workspace( tmp_work, tmp_iwork ) );
     }
 
     //
@@ -164,59 +179,48 @@
     // invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
- template< typename MatrixA >
+ template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
     static std::ptrdiff_t invoke( const char joba, const char jobu,
             const char jobv, const char jobr, const char jobt,
- const char jobp, MatrixA& a, const fortran_int_t lwork,
- optimal_workspace work ) {
+ const char jobp, MatrixA& a, VectorSVA& sva, MatrixU& u,
+ MatrixV& v, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
- return invoke( joba, jobu, jobv, jobr, jobt, jobp, a, lwork,
+ return invoke( joba, jobu, jobv, jobr, jobt, jobp, a, sva, u, v,
                 minimal_workspace() );
     }
 
     //
     // Static member function that returns the minimum size of
- // workspace-array sva.
- //
- template< $TYPES >
- static std::ptrdiff_t min_size_sva( $ARGUMENTS ) {
- $MIN_SIZE_IMPLEMENTATION
- }
-
- //
- // Static member function that returns the minimum size of
- // workspace-array u.
- //
- template< $TYPES >
- static std::ptrdiff_t min_size_u( $ARGUMENTS ) {
- $MIN_SIZE_IMPLEMENTATION
- }
-
- //
- // Static member function that returns the minimum size of
- // workspace-array v.
- //
- template< $TYPES >
- static std::ptrdiff_t min_size_v( $ARGUMENTS ) {
- $MIN_SIZE_IMPLEMENTATION
- }
-
- //
- // Static member function that returns the minimum size of
     // workspace-array work.
     //
- template< $TYPES >
- static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
- $MIN_SIZE_IMPLEMENTATION
+ static std::ptrdiff_t min_size_work( const char joba, const char jobu,
+ const char jobv, const std::ptrdiff_t m, const std::ptrdiff_t n ) {
+ if ( jobu == 'N' && jobv == 'N' ) {
+ if ( joba != 'E' && joba != 'G' )
+ return std::max< std::ptrdiff_t >( std::max<
+ std::ptrdiff_t >( 2*m+n, 4*n+1), 7 );
+ else
+ return std::max< std::ptrdiff_t >( std::max<
+ std::ptrdiff_t >( 2*m+n, n*n+4*n), 7 );
+ } else if ( jobu == 'N' || jobu == 'W' || jobv == 'N' ||
+ jobv == 'W' ) {
+ return std::max< std::ptrdiff_t >( 2*n+m, 7);
+ } else {
+ if ( jobv != 'J' )
+ return 6*n+2*n*n;
+ else
+ return std::max< std::ptrdiff_t >( m+3*n+n*n, 7);
+ }
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array iwork.
     //
- template< $TYPES >
- static std::ptrdiff_t min_size_iwork( $ARGUMENTS ) {
- $MIN_SIZE_IMPLEMENTATION
+ static std::ptrdiff_t min_size_iwork( const std::ptrdiff_t m,
+ const std::ptrdiff_t n ) {
+ return m+3*n;
     }
 };
 
@@ -233,65 +237,643 @@
 //
 // Overloaded function for gejsv. Its overload differs for
 // * MatrixA&
+// * VectorSVA&
+// * MatrixU&
+// * MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ VectorSVA& sva, MatrixU& u, MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * VectorSVA&
+// * MatrixU&
+// * MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ VectorSVA& sva, MatrixU& u, MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * VectorSVA&
+// * MatrixU&
+// * MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ VectorSVA& sva, MatrixU& u, MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * VectorSVA&
+// * MatrixU&
+// * MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ VectorSVA& sva, MatrixU& u, MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * const VectorSVA&
+// * MatrixU&
+// * MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ const VectorSVA& sva, MatrixU& u, MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * const VectorSVA&
+// * MatrixU&
+// * MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ const VectorSVA& sva, MatrixU& u, MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * const VectorSVA&
+// * MatrixU&
+// * MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ const VectorSVA& sva, MatrixU& u, MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * const VectorSVA&
+// * MatrixU&
+// * MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ const VectorSVA& sva, MatrixU& u, MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * VectorSVA&
+// * const MatrixU&
+// * MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ VectorSVA& sva, const MatrixU& u, MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * VectorSVA&
+// * const MatrixU&
+// * MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ VectorSVA& sva, const MatrixU& u, MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * VectorSVA&
+// * const MatrixU&
+// * MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ VectorSVA& sva, const MatrixU& u, MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * VectorSVA&
+// * const MatrixU&
+// * MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ VectorSVA& sva, const MatrixU& u, MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * const VectorSVA&
+// * const MatrixU&
+// * MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ const VectorSVA& sva, const MatrixU& u, MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * const VectorSVA&
+// * const MatrixU&
+// * MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ const VectorSVA& sva, const MatrixU& u, MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * const VectorSVA&
+// * const MatrixU&
+// * MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ const VectorSVA& sva, const MatrixU& u, MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * const VectorSVA&
+// * const MatrixU&
+// * MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ const VectorSVA& sva, const MatrixU& u, MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * VectorSVA&
+// * MatrixU&
+// * const MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ VectorSVA& sva, MatrixU& u, const MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * VectorSVA&
+// * MatrixU&
+// * const MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ VectorSVA& sva, MatrixU& u, const MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * VectorSVA&
+// * MatrixU&
+// * const MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ VectorSVA& sva, MatrixU& u, const MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * VectorSVA&
+// * MatrixU&
+// * const MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ VectorSVA& sva, MatrixU& u, const MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * const VectorSVA&
+// * MatrixU&
+// * const MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ const VectorSVA& sva, MatrixU& u, const MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * const VectorSVA&
+// * MatrixU&
+// * const MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ const VectorSVA& sva, MatrixU& u, const MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * const VectorSVA&
+// * MatrixU&
+// * const MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ const VectorSVA& sva, MatrixU& u, const MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * const VectorSVA&
+// * MatrixU&
+// * const MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ const VectorSVA& sva, MatrixU& u, const MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * VectorSVA&
+// * const MatrixU&
+// * const MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ VectorSVA& sva, const MatrixU& u, const MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * VectorSVA&
+// * const MatrixU&
+// * const MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, MatrixA& a,
+ VectorSVA& sva, const MatrixU& u, const MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * VectorSVA&
+// * const MatrixU&
+// * const MatrixV&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ VectorSVA& sva, const MatrixU& u, const MatrixV& v, Workspace work ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, work );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * const MatrixA&
+// * VectorSVA&
+// * const MatrixU&
+// * const MatrixV&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
+ std::ptrdiff_t >::type
+gejsv( const char joba, const char jobu, const char jobv,
+ const char jobr, const char jobt, const char jobp, const MatrixA& a,
+ VectorSVA& sva, const MatrixU& u, const MatrixV& v ) {
+ return gejsv_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
+ sva, u, v, optimal_workspace() );
+}
+
+//
+// Overloaded function for gejsv. Its overload differs for
+// * MatrixA&
+// * const VectorSVA&
+// * const MatrixU&
+// * const MatrixV&
 // * User-defined workspace
 //
-template< typename MatrixA, typename Workspace >
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gejsv( const char joba, const char jobu, const char jobv,
         const char jobr, const char jobt, const char jobp, MatrixA& a,
- const fortran_int_t lwork, Workspace work ) {
+ const VectorSVA& sva, const MatrixU& u, const MatrixV& v,
+ Workspace work ) {
     return gejsv_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
- lwork, work );
+ sva, u, v, work );
 }
 
 //
 // Overloaded function for gejsv. Its overload differs for
 // * MatrixA&
+// * const VectorSVA&
+// * const MatrixU&
+// * const MatrixV&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA >
-inline typename boost::disable_if< detail::is_workspace< MatrixA >,
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
         std::ptrdiff_t >::type
 gejsv( const char joba, const char jobu, const char jobv,
         const char jobr, const char jobt, const char jobp, MatrixA& a,
- const fortran_int_t lwork ) {
+ const VectorSVA& sva, const MatrixU& u, const MatrixV& v ) {
     return gejsv_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
- lwork, optimal_workspace() );
+ sva, u, v, optimal_workspace() );
 }
 
 //
 // Overloaded function for gejsv. Its overload differs for
 // * const MatrixA&
+// * const VectorSVA&
+// * const MatrixU&
+// * const MatrixV&
 // * User-defined workspace
 //
-template< typename MatrixA, typename Workspace >
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gejsv( const char joba, const char jobu, const char jobv,
         const char jobr, const char jobt, const char jobp, const MatrixA& a,
- const fortran_int_t lwork, Workspace work ) {
+ const VectorSVA& sva, const MatrixU& u, const MatrixV& v,
+ Workspace work ) {
     return gejsv_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
- lwork, work );
+ sva, u, v, work );
 }
 
 //
 // Overloaded function for gejsv. Its overload differs for
 // * const MatrixA&
+// * const VectorSVA&
+// * const MatrixU&
+// * const MatrixV&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA >
-inline typename boost::disable_if< detail::is_workspace< MatrixA >,
+template< typename MatrixA, typename VectorSVA, typename MatrixU,
+ typename MatrixV >
+inline typename boost::disable_if< detail::is_workspace< MatrixV >,
         std::ptrdiff_t >::type
 gejsv( const char joba, const char jobu, const char jobv,
         const char jobr, const char jobt, const char jobp, const MatrixA& a,
- const fortran_int_t lwork ) {
+ const VectorSVA& sva, const MatrixU& u, const MatrixV& v ) {
     return gejsv_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( joba, jobu, jobv, jobr, jobt, jobp, a,
- lwork, optimal_workspace() );
+ sva, u, v, optimal_workspace() );
 }
 
 } // namespace lapack


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk