Index: bindings/blas/detail/cblas.h =================================================================== --- bindings/blas/detail/cblas.h (revision 234) +++ bindings/blas/detail/cblas.h (working copy) @@ -14,8 +14,16 @@ #ifndef BOOST_NUMERIC_BINDINGS_BLAS_DETAIL_CBLAS_H #define BOOST_NUMERIC_BINDINGS_BLAS_DETAIL_CBLAS_H + +#if defined BOOST_NUMERIC_BINDINGS_BLAS_MKL +#include + +#else + extern "C" { -#include +#include } +#endif + #endif Index: bindings/blas/detail/mkl_cblas.h =================================================================== --- bindings/blas/detail/mkl_cblas.h (revision 0) +++ bindings/blas/detail/mkl_cblas.h (revision 0) @@ -0,0 +1,25 @@ +/* + * + * Copyright (c) Kresimir Fresl 2002 + * + * 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) + * + * Author acknowledges the support of the Faculty of Civil Engineering, + * University of Zagreb, Croatia. + * + */ + +#ifndef BOOST_NUMERIC_BINDINGS_BLAS_DETAIL_MKL_CBLAS_H +#define BOOST_NUMERIC_BINDINGS_BLAS_DETAIL_MKL_CBLAS_H + +extern "C" { + +#include +#include +#undef P4 // mkl_types.h defines P4 macro which breaks MPL + +} + +#endif Index: bindings/ublas/matrix_expression.hpp =================================================================== --- bindings/ublas/matrix_expression.hpp (revision 234) +++ bindings/ublas/matrix_expression.hpp (working copy) @@ -17,6 +17,8 @@ #include #include +#include + namespace boost { namespace numeric { namespace bindings { @@ -62,6 +64,60 @@ }; +template< typename T, typename U, typename Id, typename Enable > +struct adaptor< boost::numeric::ublas::matrix_unary2< T, U >, Id, Enable > { + + typedef typename copy_const< Id, T >::type adapted_type; + typedef typename property_map_of< adapted_type >::type map; + + typedef mpl::map< + mpl::pair::type>, + mpl::pair::type>, + mpl::pair, typename mpl::at >::type>, + mpl::pair, typename mpl::at >::type>, + mpl::pair::type>, + + mpl::pair::type, + tag::row_major>, + tag::column_major, + tag::row_major + >::type>, + + mpl::pair, typename mpl::at >:: type>, + mpl::pair, typename mpl::at >:: type> + > property_map; + + static std::ptrdiff_t size1( const Id& id ) { + return id.size1(); + } + + static std::ptrdiff_t size2( const Id& id ) { + return id.size2(); + } + + static typename result_of::begin_value< adapted_type >::type + begin_value( Id& id ) { + return bindings::begin_value( id.expression() ); + } + + static typename result_of::end_value< adapted_type >::type + end_value( Id& id ) { + return bindings::end_value( id.expression() ); + } + + static std::ptrdiff_t stride1( const Id& id ) { + return bindings::stride2( id.expression() ); + } + + static std::ptrdiff_t stride2( const Id& id ) { + return bindings::stride1( id.expression() ); + } + +}; + } // namespace detail } // namespace bindings } // namespace numeric