123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #ifndef BOOST_NUMERIC_ODEINT_UTIL_COPY_HPP_INCLUDED
- #define BOOST_NUMERIC_ODEINT_UTIL_COPY_HPP_INCLUDED
- #include <boost/range/algorithm/copy.hpp>
- #include <boost/utility/enable_if.hpp>
- #include <boost/numeric/odeint/util/detail/is_range.hpp>
- namespace boost {
- namespace numeric {
- namespace odeint {
- namespace detail {
- template< class Container1 , class Container2 >
- void do_copying( const Container1 &from , Container2 &to , boost::mpl::true_ )
- {
- boost::range::copy( from , boost::begin( to ) );
- }
- template< class Container1 , class Container2 >
- void do_copying( const Container1 &from , Container2 &to , boost::mpl::false_ )
- {
- to = from;
- }
- }
- template< class Container1 , class Container2 , class Enabler = void >
- struct copy_impl_sfinae
- {
- static void copy( const Container1 &from , Container2 &to )
- {
- typedef typename boost::numeric::odeint::detail::is_range< Container1 >::type is_range_type;
- detail::do_copying( from , to , is_range_type() );
- }
- };
- template< class Container1, class Container2 >
- struct copy_impl
- {
- static void copy( const Container1 &from , Container2 &to )
- {
- copy_impl_sfinae< Container1 , Container2 >::copy( from , to );
- }
- };
- template< class Container1 , class Container2 >
- void copy( const Container1 &from , Container2 &to )
- {
- copy_impl< Container1 , Container2 >::copy( from , to );
- }
- }
- }
- }
- #endif
|