diff options
Diffstat (limited to 'boost/numeric/odeint/stepper/detail/rotating_buffer.hpp')
-rw-r--r-- | boost/numeric/odeint/stepper/detail/rotating_buffer.hpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp b/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp new file mode 100644 index 0000000000..2338afd94a --- /dev/null +++ b/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp @@ -0,0 +1,84 @@ +/* + [auto_generated] + boost/numeric/odeint/stepper/detail/rotating_buffer.hpp + + [begin_description] + Implemetation of a rotating (cyclic) buffer for use in the Adam Bashforth stepper + [end_description] + + Copyright 2011 Karsten Ahnert + Copyright 2011 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_STEPPER_DETAIL_ROTATING_BUFFER_HPP_INCLUDED +#define BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ROTATING_BUFFER_HPP_INCLUDED + +#include <boost/array.hpp> + +namespace boost { +namespace numeric { +namespace odeint { +namespace detail { + +template< class T , size_t N > +class rotating_buffer +{ +public: + + typedef T value_type; + const static size_t dim = N; + + rotating_buffer( void ) : m_first( 0 ) + { } + + size_t size( void ) const + { + return dim; + } + + value_type& operator[]( size_t i ) + { + return m_data[ get_index( i ) ]; + } + + const value_type& operator[]( size_t i ) const + { + return m_data[ get_index( i ) ]; + } + + void rotate( void ) + { + if( m_first == 0 ) + m_first = dim-1; + else + --m_first; + } + +protected: + + value_type m_data[N]; + +private: + + size_t get_index( size_t i ) const + { + return ( ( i + m_first ) % dim ); + } + + size_t m_first; + +}; + + +} // detail +} // odeint +} // numeric +} // boost + + +#endif // BOOST_NUMERIC_ODEINT_STEPPER_DETAIL_ROTATING_BUFFER_HPP_INCLUDED |