85 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
|  [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
 | 
