12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- /*
- [auto_generated]
- boost/numeric/odeint/util/copy.hpp
- [begin_description]
- Copy abstraction for the usage in the steppers.
- [end_description]
- Copyright 2011-2012 Karsten Ahnert
- Copyright 2011-2012 Mario Mulansky
- 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)
- */
- #ifndef BOOST_NUMERIC_ODEINT_UTIL_COPY_HPP_INCLUDED
- #define BOOST_NUMERIC_ODEINT_UTIL_COPY_HPP_INCLUDED
- #include <type_traits>
- #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 , std::integral_constant<bool, true>)
- {
- boost::range::copy( from , boost::begin( to ) );
- }
- template< class Container1 , class Container2 >
- void do_copying( const Container1 &from , Container2 &to , std::integral_constant<bool, false>)
- {
- to = from;
- }
- } // namespace detail
- /*
- * Default implementation of the copy operation used the assign operator
- * gsl_vector must copied differently
- */
- 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 );
- }
- };
- // ToDo: allow also to copy INTO a range, not only from a range! Needs "const Container2 &to"
- template< class Container1 , class Container2 >
- void copy( const Container1 &from , Container2 &to )
- {
- copy_impl< Container1 , Container2 >::copy( from , to );
- }
- } // namespace odeint
- } // namespace numeric
- } // namespace boost
- #endif // BOOST_NUMERIC_ODEINT_UTIL_COPY_HPP_INCLUDED
|