123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #ifndef BOOST_NUMERIC_ODEINT_UTIL_RESIZER_HPP_INCLUDED
- #define BOOST_NUMERIC_ODEINT_UTIL_RESIZER_HPP_INCLUDED
- #include <boost/numeric/odeint/util/is_resizeable.hpp>
- #include <boost/numeric/odeint/util/same_size.hpp>
- #include <boost/numeric/odeint/util/resize.hpp>
- namespace boost {
- namespace numeric {
- namespace odeint {
- template< class ResizeWrappedState , class State >
- bool adjust_size_by_resizeability( ResizeWrappedState &x , const State &y , boost::true_type )
- {
- if ( !same_size( x.m_v , y ) )
- {
- resize( x.m_v , y );
- return true;
- }
- else
- return false;
- }
- template< class ResizeWrappedState , class State >
- bool adjust_size_by_resizeability( ResizeWrappedState & /* x */ , const State & /* y */ , boost::false_type )
- {
- return false;
- }
- struct always_resizer
- {
- template< class State , class ResizeFunction >
- bool adjust_size( const State &x , ResizeFunction f )
- {
- return f( x );
- }
- };
- struct initially_resizer
- {
- bool m_initialized;
- initially_resizer() : m_initialized( false )
- { }
- template< class State , class ResizeFunction >
- bool adjust_size( const State &x , ResizeFunction f )
- {
- if( !m_initialized )
- {
- m_initialized = true;
- return f( x );
- } else
- return false;
- }
- };
- struct never_resizer
- {
- template< class State , class ResizeFunction >
- bool adjust_size( const State &/*x*/ , ResizeFunction /*f*/ )
- {
- return false;
- }
- };
- }
- }
- }
- #endif
|