// // Copyright (c) 2003--2008 // Toon Knapen, Karl Meerbergen, Kresimir Fresl, // Thomas Klimpel and Rutger ter Borg // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // THIS FILE IS AUTOMATICALLY GENERATED // PLEASE DO NOT EDIT! // #ifndef BOOST_NUMERIC_BINDINGS_LAPACK_$GROUPNAME_HPP #define BOOST_NUMERIC_BINDINGS_LAPACK_$GROUPNAME_HPP #include namespace boost { namespace numeric { namespace bindings { namespace lapack { $DESCRIPTION struct gelsd_base_impl { static void operator()( int const m, int const n, int const nrhs, float* a, int const lda, float* b, int const ldb, float* s, float const rcond, int& rank, float* work, int const lwork, int* iwork, int& info ) { LAPACK_SGELSD( &m, &n, &nrhs, a, &lda, b, &ldb, s, &rcond, &rank, work, &lwork, iwork, &info ); } static void operator()( int const m, int const n, int const nrhs, double* a, int const lda, double* b, int const ldb, double* s, double const rcond, int& rank, double* work, int const lwork, int* iwork, int& info ) { LAPACK_DGELSD( &m, &n, &nrhs, a, &lda, b, &ldb, s, &rcond, &rank, work, &lwork, iwork, &info ); } static void operator()( int const m, int const n, int const nrhs, traits::complex_f* a, int const lda, traits::complex_f* b, int const ldb, float* s, float const rcond, int& rank, traits::complex_f* work, int const lwork, float* rwork, int* iwork, int& info ) { LAPACK_CGELSD( &m, &n, &nrhs, traits::complex_ptr(a), &lda, traits::complex_ptr(b), &ldb, s, &rcond, &rank, traits::complex_ptr(work), &lwork, rwork, iwork, &info ); } static void operator()( int const m, int const n, int const nrhs, traits::complex_d* a, int const lda, traits::complex_d* b, int const ldb, double* s, double const rcond, int& rank, traits::complex_d* work, int const lwork, double* rwork, int* iwork, int& info ) { LAPACK_ZGELSD( &m, &n, &nrhs, traits::complex_ptr(a), &lda, traits::complex_ptr(b), &ldb, s, &rcond, &rank, traits::complex_ptr(work), &lwork, rwork, iwork, &info ); } }; template< typename ValueType, typename Enable = void > struct gelsd_impl{}; // real specialization template< typename ValueType > struct gelsd_impl< ValueType, boost::enable_if< is_real::type > { typedef typename traits::type_traits::real_type real_type; // user-defined workspace specialization template< typename MatrixA, typename MatrixB, typename VectorS, typename WORK, typename IWORK > static void operator()( MatrixA& a, MatrixB& b, VectorS& s, real_type const rcond, int& rank, int& info, workspace2< WORK, IWORK >& work ) { assert( ... ); assert( ... ); assert( ... ); assert( ... ); operator()( traits::matrix_size1(a), traits::matrix_size2(a), traits::matrix_size2(b), traits::matrix_storage(a), traits::leading_dimension(a), traits::matrix_storage(b), traits::leading_dimension(b), traits::vector_storage(s), rcond, rank, traits::vector_storage(work), traits::vector_size(work), traits::vector_storage(iwork), info ); } // minimal workspace specialization template< typename MatrixA, typename MatrixB, typename VectorS > static void operator()( MatrixA& a, MatrixB& b, VectorS& s, real_type const rcond, int& rank, int& info, minimal_workspace& work ) { } // optimal workspace specialization template< typename MatrixA, typename MatrixB, typename VectorS > static void operator()( MatrixA& a, MatrixB& b, VectorS& s, real_type const rcond, int& rank, int& info, optimal_workspace &work ) { } }; // complex specialization template< typename ValueType > struct gelsd_impl< ValueType, boost::enable_if< is_complex::type > { typedef typename traits::type_traits::real_type real_type; // user-defined workspace specialization template< typename MatrixA, typename MatrixB, typename VectorS, typename WORK, typename RWORK, typename IWORK > static void operator()( MatrixA& a, MatrixB& b, VectorS& s, real_type const rcond, int& rank, int& info, workspace3< WORK, RWORK, IWORK >& work ) { assert( ... ); assert( ... ); assert( ... ); assert( ... ); operator()( traits::matrix_size1(a), traits::matrix_size2(a), traits::matrix_size2(b), traits::matrix_storage(a), traits::leading_dimension(a), traits::matrix_storage(b), traits::leading_dimension(b), traits::vector_storage(s), rcond, rank, traits::vector_storage(work), traits::vector_size(work), traits::vector_storage(rwork), traits::vector_storage(iwork), info ); } // minimal workspace specialization template< typename MatrixA, typename MatrixB, typename VectorS > static void operator()( MatrixA& a, MatrixB& b, VectorS& s, real_type const rcond, int& rank, int& info, minimal_workspace& work ) { } // optimal workspace specialization template< typename MatrixA, typename MatrixB, typename VectorS > static void operator()( MatrixA& a, MatrixB& b, VectorS& s, real_type const rcond, int& rank, int& info, optimal_workspace &work ) { } }; }}}} // namespace boost::numeric::bindings::lapack #endif