Boost  v1.57.0
doxygen for www.boost.org
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
boost::circular_buffer< T, Alloc > Class Template Reference

Circular buffer - a STL compliant container. More...

#include <base.hpp>

Inheritance diagram for boost::circular_buffer< T, Alloc >:

Public Types

typedef circular_buffer< T, Alloc > this_type
 The type of this circular_buffer. More...
 
typedef
boost::container::allocator_traits
< Alloc >::value_type 
value_type
 The type of elements stored in the circular_buffer. More...
 
typedef
boost::container::allocator_traits
< Alloc >::pointer 
pointer
 A pointer to an element. More...
 
typedef
boost::container::allocator_traits
< Alloc >::const_pointer 
const_pointer
 A const pointer to the element. More...
 
typedef
boost::container::allocator_traits
< Alloc >::reference 
reference
 A reference to an element. More...
 
typedef
boost::container::allocator_traits
< Alloc >::const_reference 
const_reference
 A const reference to an element. More...
 
typedef
boost::container::allocator_traits
< Alloc >::difference_type 
difference_type
 The distance type. More...
 
typedef
boost::container::allocator_traits
< Alloc >::size_type 
size_type
 The size type. More...
 
typedef Alloc allocator_type
 The type of an allocator used in the circular_buffer. More...
 
typedef cb_details::iterator
< circular_buffer< T, Alloc >
, cb_details::const_traits
< boost::container::allocator_traits
< Alloc > > > 
const_iterator
 A const (random access) iterator used to iterate through the circular_buffer. More...
 
typedef cb_details::iterator
< circular_buffer< T, Alloc >
, cb_details::nonconst_traits
< boost::container::allocator_traits
< Alloc > > > 
iterator
 A (random access) iterator used to iterate through the circular_buffer. More...
 
typedef
boost::reverse_iterator
< const_iterator
const_reverse_iterator
 A const iterator used to iterate backwards through a circular_buffer. More...
 
typedef
boost::reverse_iterator
< iterator
reverse_iterator
 An iterator used to iterate backwards through a circular_buffer. More...
 
typedef std::pair< pointer,
size_type
array_range
 An array range. More...
 
typedef std::pair
< const_pointer, size_type
const_array_range
 A range of a const array. More...
 
typedef size_type capacity_type
 The capacity type. More...
 
typedef const value_typeparam_value_type
 A type representing the "best" way to pass the value_type to a method. More...
 

Public Member Functions

typedef BOOST_RV_REF (value_type) rvalue_type
 A type representing rvalue from param type. More...
 
allocator_type get_allocator () const BOOST_NOEXCEPT
 Get the allocator. More...
 
allocator_typeget_allocator () BOOST_NOEXCEPT
 Get the allocator reference. More...
 
iterator begin () BOOST_NOEXCEPT
 Get the iterator pointing to the beginning of the circular_buffer. More...
 
iterator end () BOOST_NOEXCEPT
 Get the iterator pointing to the end of the circular_buffer. More...
 
const_iterator begin () const BOOST_NOEXCEPT
 Get the const iterator pointing to the beginning of the circular_buffer. More...
 
const_iterator end () const BOOST_NOEXCEPT
 Get the const iterator pointing to the end of the circular_buffer. More...
 
reverse_iterator rbegin () BOOST_NOEXCEPT
 Get the iterator pointing to the beginning of the "reversed" circular_buffer. More...
 
reverse_iterator rend () BOOST_NOEXCEPT
 Get the iterator pointing to the end of the "reversed" circular_buffer. More...
 
const_reverse_iterator rbegin () const BOOST_NOEXCEPT
 Get the const iterator pointing to the beginning of the "reversed" circular_buffer. More...
 
const_reverse_iterator rend () const BOOST_NOEXCEPT
 Get the const iterator pointing to the end of the "reversed" circular_buffer. More...
 
reference operator[] (size_type index)
 Get the element at the index position. More...
 
const_reference operator[] (size_type index) const
 Get the element at the index position. More...
 
reference at (size_type index)
 Get the element at the index position. More...
 
const_reference at (size_type index) const
 Get the element at the index position. More...
 
reference front ()
 Get the first element. More...
 
reference back ()
 Get the last element. More...
 
const_reference front () const
 Get the first element. More...
 
const_reference back () const
 Get the last element. More...
 
array_range array_one ()
 Get the first continuous array of the internal buffer. More...
 
array_range array_two ()
 Get the second continuous array of the internal buffer. More...
 
const_array_range array_one () const
 Get the first continuous array of the internal buffer. More...
 
const_array_range array_two () const
 Get the second continuous array of the internal buffer. More...
 
pointer linearize ()
 Linearize the internal buffer into a continuous array. More...
 
bool is_linearized () const BOOST_NOEXCEPT
 Is the circular_buffer linearized? More...
 
void rotate (const_iterator new_begin)
 Rotate elements in the circular_buffer. More...
 
size_type size () const BOOST_NOEXCEPT
 Get the number of elements currently stored in the circular_buffer. More...
 
size_type max_size () const BOOST_NOEXCEPT
 Get the largest possible size or capacity of the circular_buffer. More...
 
bool empty () const BOOST_NOEXCEPT
 Is the circular_buffer empty? More...
 
bool full () const BOOST_NOEXCEPT
 Is the circular_buffer full? More...
 
size_type reserve () const BOOST_NOEXCEPT
 Get the maximum number of elements which can be inserted into the circular_buffer without overwriting any of already stored elements. More...
 
capacity_type capacity () const BOOST_NOEXCEPT
 Get the capacity of the circular_buffer. More...
 
void set_capacity (capacity_type new_capacity)
 Change the capacity of the circular_buffer. More...
 
void resize (size_type new_size, param_value_type item=value_type())
 Change the size of the circular_buffer. More...
 
void rset_capacity (capacity_type new_capacity)
 Change the capacity of the circular_buffer. More...
 
void rresize (size_type new_size, param_value_type item=value_type())
 Change the size of the circular_buffer. More...
 
 circular_buffer (const allocator_type &alloc=allocator_type()) BOOST_NOEXCEPT
 Create an empty circular_buffer with zero capacity. More...
 
 circular_buffer (capacity_type buffer_capacity, const allocator_type &alloc=allocator_type())
 Create an empty circular_buffer with the specified capacity. More...
 
 circular_buffer (size_type n, param_value_type item, const allocator_type &alloc=allocator_type())
 Create a full circular_buffer with the specified capacity and filled with n copies of item. More...
 
 circular_buffer (capacity_type buffer_capacity, size_type n, param_value_type item, const allocator_type &alloc=allocator_type())
 Create a circular_buffer with the specified capacity and filled with n copies of item. More...
 
 circular_buffer (const circular_buffer< T, Alloc > &cb)
 The copy constructor. More...
 
 circular_buffer (circular_buffer< T, Alloc > &&cb) BOOST_NOEXCEPT
 The move constructor. More...
 
template<class InputIterator >
 circular_buffer (InputIterator first, InputIterator last, const allocator_type &alloc=allocator_type())
 Create a full circular_buffer filled with a copy of the range. More...
 
template<class InputIterator >
 circular_buffer (capacity_type buffer_capacity, InputIterator first, InputIterator last, const allocator_type &alloc=allocator_type())
 Create a circular_buffer with the specified capacity and filled with a copy of the range. More...
 
 ~circular_buffer () BOOST_NOEXCEPT
 The destructor. More...
 
circular_buffer< T, Alloc > & operator= (const circular_buffer< T, Alloc > &cb)
 The assign operator. More...
 
circular_buffer< T, Alloc > & operator= (circular_buffer< T, Alloc > &&cb) BOOST_NOEXCEPT
 Move assigns content of cb to *this, leaving cb empty. More...
 
void assign (size_type n, param_value_type item)
 Assign n items into the circular_buffer. More...
 
void assign (capacity_type buffer_capacity, size_type n, param_value_type item)
 Assign n items into the circular_buffer specifying the capacity. More...
 
template<class InputIterator >
void assign (InputIterator first, InputIterator last)
 Assign a copy of the range into the circular_buffer. More...
 
template<class InputIterator >
void assign (capacity_type buffer_capacity, InputIterator first, InputIterator last)
 Assign a copy of the range into the circular_buffer specifying the capacity. More...
 
void swap (circular_buffer< T, Alloc > &cb) BOOST_NOEXCEPT
 Swap the contents of two circular_buffers. More...
 
void push_back (param_value_type item)
 Insert a new element at the end of the circular_buffer. More...
 
void push_back (rvalue_type item)
 Insert a new element at the end of the circular_buffer using rvalue references or rvalues references emulation. More...
 
void push_back ()
 Insert a new default-constructed element at the end of the circular_buffer. More...
 
void push_front (param_value_type item)
 Insert a new element at the beginning of the circular_buffer. More...
 
void push_front (rvalue_type item)
 Insert a new element at the beginning of the circular_buffer using rvalue references or rvalues references emulation. More...
 
void push_front ()
 Insert a new default-constructed element at the beginning of the circular_buffer. More...
 
void pop_back ()
 Remove the last element from the circular_buffer. More...
 
void pop_front ()
 Remove the first element from the circular_buffer. More...
 
iterator insert (iterator pos, param_value_type item)
 Insert an element at the specified position. More...
 
iterator insert (iterator pos, rvalue_type item)
 Insert an element at the specified position. More...
 
iterator insert (iterator pos)
 Insert a default-constructed element at the specified position. More...
 
void insert (iterator pos, size_type n, param_value_type item)
 Insert n copies of the item at the specified position. More...
 
template<class InputIterator >
void insert (iterator pos, InputIterator first, InputIterator last)
 Insert the range [first, last) at the specified position. More...
 
iterator rinsert (iterator pos, param_value_type item)
 Insert an element before the specified position. More...
 
iterator rinsert (iterator pos, rvalue_type item)
 Insert an element before the specified position. More...
 
iterator rinsert (iterator pos)
 Insert an element before the specified position. More...
 
void rinsert (iterator pos, size_type n, param_value_type item)
 Insert n copies of the item before the specified position. More...
 
template<class InputIterator >
void rinsert (iterator pos, InputIterator first, InputIterator last)
 Insert the range [first, last) before the specified position. More...
 
iterator erase (iterator pos)
 Remove an element at the specified position. More...
 
iterator erase (iterator first, iterator last)
 Erase the range [first, last). More...
 
iterator rerase (iterator pos)
 Remove an element at the specified position. More...
 
iterator rerase (iterator first, iterator last)
 Erase the range [first, last). More...
 
void erase_begin (size_type n)
 Remove first n elements (with constant complexity for scalar types). More...
 
void erase_end (size_type n)
 Remove last n elements (with constant complexity for scalar types). More...
 
void clear () BOOST_NOEXCEPT
 Remove all stored elements from the circular_buffer. More...
 

Friends

template<class Buff , class Traits >
struct cb_details::iterator
 

Detailed Description

template<class T, class Alloc>
class boost::circular_buffer< T, Alloc >

Circular buffer - a STL compliant container.

Template Parameters
TThe type of the elements stored in the circular_buffer.
Type Requirements T
The T has to be SGIAssignable (SGI STL defined combination of Assignable and CopyConstructible). Moreover T has to be DefaultConstructible if supplied as a default parameter when invoking some of the circular_buffer's methods e.g. insert(iterator pos, const value_type& item = value_type()). And EqualityComparable and/or LessThanComparable if the circular_buffer will be compared with another container.
Template Parameters
AllocThe allocator type used for all internal memory management.
Type Requirements Alloc
The Alloc has to meet the allocator requirements imposed by STL.
Default Alloc
std::allocator<T>

For detailed documentation of the circular_buffer visit: http://www.boost.org/libs/circular_buffer/doc/circular_buffer.html

Member Typedef Documentation

template<class T, class Alloc>
typedef Alloc boost::circular_buffer< T, Alloc >::allocator_type

The type of an allocator used in the circular_buffer.

template<class T, class Alloc>
typedef std::pair<pointer, size_type> boost::circular_buffer< T, Alloc >::array_range

An array range.

(A typedef for the std::pair where its first element is a pointer to a beginning of an array and its second element represents a size of the array.)

template<class T, class Alloc>
typedef size_type boost::circular_buffer< T, Alloc >::capacity_type

The capacity type.

(Same as size_type - defined for consistency with the __cbso class.

template<class T, class Alloc>
typedef std::pair<const_pointer, size_type> boost::circular_buffer< T, Alloc >::const_array_range

A range of a const array.

(A typedef for the std::pair where its first element is a pointer to a beginning of a const array and its second element represents a size of the const array.)

A const (random access) iterator used to iterate through the circular_buffer.

template<class T, class Alloc>
typedef boost::container::allocator_traits<Alloc>::const_pointer boost::circular_buffer< T, Alloc >::const_pointer

A const pointer to the element.

template<class T, class Alloc>
typedef boost::container::allocator_traits<Alloc>::const_reference boost::circular_buffer< T, Alloc >::const_reference

A const reference to an element.

template<class T, class Alloc>
typedef boost::reverse_iterator<const_iterator> boost::circular_buffer< T, Alloc >::const_reverse_iterator

A const iterator used to iterate backwards through a circular_buffer.

template<class T, class Alloc>
typedef boost::container::allocator_traits<Alloc>::difference_type boost::circular_buffer< T, Alloc >::difference_type

The distance type.

(A signed integral type used to represent the distance between two iterators.)

A (random access) iterator used to iterate through the circular_buffer.

template<class T, class Alloc>
typedef const value_type& boost::circular_buffer< T, Alloc >::param_value_type

A type representing the "best" way to pass the value_type to a method.

template<class T, class Alloc>
typedef boost::container::allocator_traits<Alloc>::pointer boost::circular_buffer< T, Alloc >::pointer

A pointer to an element.

template<class T, class Alloc>
typedef boost::container::allocator_traits<Alloc>::reference boost::circular_buffer< T, Alloc >::reference

A reference to an element.

template<class T, class Alloc>
typedef boost::reverse_iterator<iterator> boost::circular_buffer< T, Alloc >::reverse_iterator

An iterator used to iterate backwards through a circular_buffer.

template<class T, class Alloc>
typedef boost::container::allocator_traits<Alloc>::size_type boost::circular_buffer< T, Alloc >::size_type

The size type.

(An unsigned integral type that can represent any non-negative value of the container's distance type.)

template<class T, class Alloc>
typedef circular_buffer<T, Alloc> boost::circular_buffer< T, Alloc >::this_type

The type of this circular_buffer.

template<class T, class Alloc>
typedef boost::container::allocator_traits<Alloc>::value_type boost::circular_buffer< T, Alloc >::value_type

The type of elements stored in the circular_buffer.

Constructor & Destructor Documentation

template<class T, class Alloc>
boost::circular_buffer< T, Alloc >::circular_buffer ( const allocator_type alloc = allocator_type())
inlineexplicit

Create an empty circular_buffer with zero capacity.

Postcondition
capacity() == 0 && size() == 0
Parameters
allocThe allocator.
Exceptions
Nothing.
Complexity
Constant.
Warning
Since Boost version 1.36 the behaviour of this constructor has changed. Now the constructor does not allocate any memory and both capacity and size are set to zero. Also note when inserting an element into a circular_buffer with zero capacity (e.g. by push_back(const_reference) or insert(iterator, value_type)) nothing will be inserted and the size (as well as capacity) remains zero.
Note
You can explicitly set the capacity by calling the set_capacity(capacity_type) method or you can use the other constructor with the capacity specified.
See also
circular_buffer(capacity_type, const allocator_type& alloc), set_capacity(capacity_type)
template<class T, class Alloc>
boost::circular_buffer< T, Alloc >::circular_buffer ( capacity_type  buffer_capacity,
const allocator_type alloc = allocator_type() 
)
inlineexplicit

Create an empty circular_buffer with the specified capacity.

Postcondition
capacity() == buffer_capacity && size() == 0
Parameters
buffer_capacityThe maximum number of elements which can be stored in the circular_buffer.
allocThe allocator.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used).
Complexity
Constant.
template<class T, class Alloc>
boost::circular_buffer< T, Alloc >::circular_buffer ( size_type  n,
param_value_type  item,
const allocator_type alloc = allocator_type() 
)
inline

Create a full circular_buffer with the specified capacity and filled with n copies of item.

Postcondition
capacity() == n && full() && (*this)[0] == item && (*this)[1] == item && ... && (*this)[n - 1] == item
Parameters
nThe number of elements the created circular_buffer will be filled with.
itemThe element the created circular_buffer will be filled with.
allocThe allocator.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws.
Complexity
Linear (in the n).
template<class T, class Alloc>
boost::circular_buffer< T, Alloc >::circular_buffer ( capacity_type  buffer_capacity,
size_type  n,
param_value_type  item,
const allocator_type alloc = allocator_type() 
)
inline

Create a circular_buffer with the specified capacity and filled with n copies of item.

Precondition
buffer_capacity >= n
Postcondition
capacity() == buffer_capacity && size() == n && (*this)[0] == item && (*this)[1] == item && ... && (*this)[n - 1] == item
Parameters
buffer_capacityThe capacity of the created circular_buffer.
nThe number of elements the created circular_buffer will be filled with.
itemThe element the created circular_buffer will be filled with.
allocThe allocator.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws.
Complexity
Linear (in the n).
template<class T, class Alloc>
boost::circular_buffer< T, Alloc >::circular_buffer ( const circular_buffer< T, Alloc > &  cb)
inline

The copy constructor.

Creates a copy of the specified circular_buffer.

Postcondition
*this == cb
Parameters
cbThe circular_buffer to be copied.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws.
Complexity
Linear (in the size of cb).
template<class T, class Alloc>
boost::circular_buffer< T, Alloc >::circular_buffer ( circular_buffer< T, Alloc > &&  cb)
inline

The move constructor.

Move constructs a circular_buffer from cb, leaving cb empty.

Precondition
C++ compiler with rvalue references support.
Postcondition
cb.empty()
Parameters
cbcircular_buffer to 'steal' value from.
Exceptions
Nothing.
Constant.
template<class T, class Alloc>
template<class InputIterator >
boost::circular_buffer< T, Alloc >::circular_buffer ( InputIterator  first,
InputIterator  last,
const allocator_type alloc = allocator_type() 
)
inline

Create a full circular_buffer filled with a copy of the range.

Precondition
Valid range [first, last).
first and last have to meet the requirements of InputIterator.
Postcondition
capacity() == std::distance(first, last) && full() && (*this)[0]== *first && (*this)[1] == *(first + 1) && ... && (*this)[std::distance(first, last) - 1] == *(last - 1)
Parameters
firstThe beginning of the range to be copied.
lastThe end of the range to be copied.
allocThe allocator.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws.
Complexity
Linear (in the std::distance(first, last)).
template<class T, class Alloc>
template<class InputIterator >
boost::circular_buffer< T, Alloc >::circular_buffer ( capacity_type  buffer_capacity,
InputIterator  first,
InputIterator  last,
const allocator_type alloc = allocator_type() 
)
inline

Create a circular_buffer with the specified capacity and filled with a copy of the range.

Precondition
Valid range [first, last).
first and last have to meet the requirements of InputIterator.
Postcondition
capacity() == buffer_capacity && size() <= std::distance(first, last) && (*this)[0]== *(last - buffer_capacity) && (*this)[1] == *(last - buffer_capacity + 1) && ... && (*this)[buffer_capacity - 1] == *(last - 1)

If the number of items to be copied from the range [first, last) is greater than the specified buffer_capacity then only elements from the range [last - buffer_capacity, last) will be copied.
Parameters
buffer_capacityThe capacity of the created circular_buffer.
firstThe beginning of the range to be copied.
lastThe end of the range to be copied.
allocThe allocator.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws.
Complexity
Linear (in std::distance(first, last); in min[capacity, std::distance(first, last)] if the InputIterator is a RandomAccessIterator).
template<class T, class Alloc>
boost::circular_buffer< T, Alloc >::~circular_buffer ( )
inline

The destructor.

Destroys the circular_buffer.

Exceptions
Nothing.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (including iterators equal to end()).
Complexity
Constant (in the size of the circular_buffer) for scalar types; linear for other types.
See also
clear()

Member Function Documentation

template<class T, class Alloc>
array_range boost::circular_buffer< T, Alloc >::array_one ( )
inline

Get the first continuous array of the internal buffer.

This method in combination with array_two() can be useful when passing the stored data into a legacy C API as an array. Suppose there is a circular_buffer of capacity 10, containing 7 characters 'a', 'b', ..., 'g' where buff[0] == 'a', buff[1] == 'b', ... and buff[6] == 'g':

circular_buffer<char> buff(10);

The internal representation is often not linear and the state of the internal buffer may look like this:

|e|f|g| | | |a|b|c|d|
end ___^
begin _______^


where |a|b|c|d| represents the "array one", |e|f|g| represents the "array two" and | | | | is a free space.
Now consider a typical C style function for writing data into a file:

int write(int file_desc, char* buff, int num_bytes);

There are two ways how to write the content of the circular_buffer into a file. Either relying on array_one() and array_two() methods and calling the write function twice:

array_range ar = buff.array_one();
write(file_desc, ar.first, ar.second);
ar = buff.array_two();
write(file_desc, ar.first, ar.second);


Or relying on the linearize() method:

write(file_desc, buff.linearize(), buff.size());

Since the complexity of array_one() and array_two() methods is constant the first option is suitable when calling the write method is "cheap". On the other hand the second option is more suitable when calling the write method is more "expensive" than calling the linearize() method whose complexity is linear.

Returns
The array range of the first continuous array of the internal buffer. In the case the circular_buffer is empty the size of the returned array is 0.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
Warning
In general invoking any method which modifies the internal state of the circular_buffer may delinearize the internal buffer and invalidate the array ranges returned by array_one() and array_two() (and their const versions).
Note
In the case the internal buffer is linear e.g. |a|b|c|d|e|f|g| | | | the "array one" is represented by |a|b|c|d|e|f|g| and the "array two" does not exist (the array_two() method returns an array with the size 0).
See also
array_two(), linearize()
template<class T, class Alloc>
const_array_range boost::circular_buffer< T, Alloc >::array_one ( ) const
inline

Get the first continuous array of the internal buffer.

This method in combination with array_two() const can be useful when passing the stored data into a legacy C API as an array.

Returns
The array range of the first continuous array of the internal buffer. In the case the circular_buffer is empty the size of the returned array is 0.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
array_two() const; array_one() for more details how to pass data into a legacy C API.
template<class T, class Alloc>
array_range boost::circular_buffer< T, Alloc >::array_two ( )
inline

Get the second continuous array of the internal buffer.

This method in combination with array_one() can be useful when passing the stored data into a legacy C API as an array.

Returns
The array range of the second continuous array of the internal buffer. In the case the internal buffer is linear or the circular_buffer is empty the size of the returned array is 0.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
array_one()
template<class T, class Alloc>
const_array_range boost::circular_buffer< T, Alloc >::array_two ( ) const
inline

Get the second continuous array of the internal buffer.

This method in combination with array_one() const can be useful when passing the stored data into a legacy C API as an array.

Returns
The array range of the second continuous array of the internal buffer. In the case the internal buffer is linear or the circular_buffer is empty the size of the returned array is 0.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
array_one() const
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::assign ( size_type  n,
param_value_type  item 
)
inline

Assign n items into the circular_buffer.

The content of the circular_buffer will be removed and replaced with n copies of the item.

Postcondition
capacity() == n && size() == n && (*this)[0] == item && (*this)[1] == item && ... && (*this) [n - 1] == item
Parameters
nThe number of elements the circular_buffer will be filled with.
itemThe element the circular_buffer will be filled with.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws.
Exception Safety
Basic.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (except iterators equal to end()).
Complexity
Linear (in the n).
See also
operator=, assign(capacity_type, size_type, const_reference), assign(InputIterator, InputIterator), assign(capacity_type, InputIterator, InputIterator)

Referenced by boost::circular_buffer_space_optimized< T, Alloc >::assign(), boost::circular_buffer< Sample >::assign(), and boost::circular_buffer_space_optimized< T, Alloc >::operator=().

template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::assign ( capacity_type  buffer_capacity,
size_type  n,
param_value_type  item 
)
inline

Assign n items into the circular_buffer specifying the capacity.

The capacity of the circular_buffer will be set to the specified value and the content of the circular_buffer will be removed and replaced with n copies of the item.

Precondition
capacity >= n
Postcondition
capacity() == buffer_capacity && size() == n && (*this)[0] == item && (*this)[1] == item && ... && (*this) [n - 1] == item
Parameters
buffer_capacityThe new capacity.
nThe number of elements the circular_buffer will be filled with.
itemThe element the circular_buffer will be filled with.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws.
Exception Safety
Basic.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (except iterators equal to end()).
Complexity
Linear (in the n).
See also
operator=, assign(size_type, const_reference), assign(InputIterator, InputIterator), assign(capacity_type, InputIterator, InputIterator)
template<class T, class Alloc>
template<class InputIterator >
void boost::circular_buffer< T, Alloc >::assign ( InputIterator  first,
InputIterator  last 
)
inline

Assign a copy of the range into the circular_buffer.

The content of the circular_buffer will be removed and replaced with copies of elements from the specified range.

Precondition
Valid range [first, last).
first and last have to meet the requirements of InputIterator.
Postcondition
capacity() == std::distance(first, last) && size() == std::distance(first, last) && (*this)[0]== *first && (*this)[1] == *(first + 1) && ... && (*this)[std::distance(first, last) - 1] == *(last - 1)
Parameters
firstThe beginning of the range to be copied.
lastThe end of the range to be copied.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws.
Exception Safety
Basic.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (except iterators equal to end()).
Complexity
Linear (in the std::distance(first, last)).
See also
operator=, assign(size_type, const_reference), assign(capacity_type, size_type, const_reference), assign(capacity_type, InputIterator, InputIterator)
template<class T, class Alloc>
template<class InputIterator >
void boost::circular_buffer< T, Alloc >::assign ( capacity_type  buffer_capacity,
InputIterator  first,
InputIterator  last 
)
inline

Assign a copy of the range into the circular_buffer specifying the capacity.

The capacity of the circular_buffer will be set to the specified value and the content of the circular_buffer will be removed and replaced with copies of elements from the specified range.

Precondition
Valid range [first, last).
first and last have to meet the requirements of InputIterator.
Postcondition
capacity() == buffer_capacity && size() <= std::distance(first, last) && (*this)[0]== *(last - buffer_capacity) && (*this)[1] == *(last - buffer_capacity + 1) && ... && (*this)[buffer_capacity - 1] == *(last - 1)

If the number of items to be copied from the range [first, last) is greater than the specified buffer_capacity then only elements from the range [last - buffer_capacity, last) will be copied.
Parameters
buffer_capacityThe new capacity.
firstThe beginning of the range to be copied.
lastThe end of the range to be copied.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws.
Exception Safety
Basic.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (except iterators equal to end()).
Complexity
Linear (in std::distance(first, last); in min[capacity, std::distance(first, last)] if the InputIterator is a RandomAccessIterator).
See also
operator=, assign(size_type, const_reference), assign(capacity_type, size_type, const_reference), assign(InputIterator, InputIterator)
template<class T, class Alloc>
reference boost::circular_buffer< T, Alloc >::at ( size_type  index)
inline

Get the element at the index position.

Parameters
indexThe position of the element.
Returns
A reference to the element at the index position.
Exceptions
<code>std::out_of_range</code>when the index is invalid (when index >= size()).
Exception Safety
Strong.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
operator[]
template<class T, class Alloc>
const_reference boost::circular_buffer< T, Alloc >::at ( size_type  index) const
inline

Get the element at the index position.

Parameters
indexThe position of the element.
Returns
A const reference to the element at the index position.
Exceptions
<code>std::out_of_range</code>when the index is invalid (when index >= size()).
Exception Safety
Strong.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
operator[] const
template<class T, class Alloc>
reference boost::circular_buffer< T, Alloc >::back ( )
inline

Get the last element.

Precondition
!empty()
Returns
A reference to the last element of the circular_buffer.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
front()

Referenced by boost::circular_buffer< Sample >::rotate().

template<class T, class Alloc>
const_reference boost::circular_buffer< T, Alloc >::back ( ) const
inline

Get the last element.

Precondition
!empty()
Returns
A const reference to the last element of the circular_buffer.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
front() const
template<class T, class Alloc>
const_iterator boost::circular_buffer< T, Alloc >::begin ( ) const
inline

Get the const iterator pointing to the beginning of the circular_buffer.

Returns
A const random access iterator pointing to the first element of the circular_buffer. If the circular_buffer is empty it returns an iterator equal to the one returned by end() const.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
end() const, rbegin() const, rend() const
template<class T, class Alloc>
typedef boost::circular_buffer< T, Alloc >::BOOST_RV_REF ( value_type  )

A type representing rvalue from param type.

On compilers without rvalue references support this type is the Boost.Moves type used for emulation.

template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::clear ( )
inline

Remove all stored elements from the circular_buffer.

Postcondition
size() == 0
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (except iterators equal to end()).
Complexity
Constant (in the size of the circular_buffer) for scalar types; linear for other types.
See also
~circular_buffer(), erase(iterator), erase(iterator, iterator), rerase(iterator), rerase(iterator, iterator), erase_begin(size_type), erase_end(size_type)
template<class T, class Alloc>
bool boost::circular_buffer< T, Alloc >::empty ( ) const
inline

Is the circular_buffer empty?

Returns
true if there are no elements stored in the circular_buffer; false otherwise.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
full()

Referenced by boost::circular_buffer< Sample >::array_one(), boost::circular_buffer< Sample >::array_two(), boost::circular_buffer< Sample >::back(), boost::circular_buffer< Sample >::begin(), boost::circular_buffer< Sample >::front(), boost::circular_buffer< Sample >::linearize(), boost::circular_buffer< Sample >::pop_back(), and boost::circular_buffer< Sample >::pop_front().

template<class T, class Alloc>
const_iterator boost::circular_buffer< T, Alloc >::end ( ) const
inline

Get the const iterator pointing to the end of the circular_buffer.

Returns
A const random access iterator pointing to the element "one behind" the last element of the circular_buffer. If the circular_buffer is empty it returns an iterator equal to the one returned by begin() const const.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
begin() const, rbegin() const, rend() const
template<class T, class Alloc>
iterator boost::circular_buffer< T, Alloc >::erase ( iterator  pos)
inline

Remove an element at the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer (but not an end()).
Postcondition
The element at the position pos is removed.
Parameters
posAn iterator pointing at the element to be removed.
Returns
Iterator to the first element remaining beyond the removed element or end() if no such element exists.
Exceptions
<ahref="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the erased element and iterators pointing to the elements behind the erased element (towards the end; except iterators equal to end()).
Complexity
Linear (in std::distance(pos, end())).
See also
erase(iterator, iterator), rerase(iterator), rerase(iterator, iterator), erase_begin(size_type), erase_end(size_type), clear()

Referenced by boost::circular_buffer_space_optimized< T, Alloc >::erase(), boost::circular_buffer< Sample >::resize(), and boost::circular_buffer_space_optimized< T, Alloc >::set_capacity().

template<class T, class Alloc>
iterator boost::circular_buffer< T, Alloc >::erase ( iterator  first,
iterator  last 
)
inline

Erase the range [first, last).

Precondition
Valid range [first, last).
Postcondition
The elements from the range [first, last) are removed. (If first == last nothing is removed.)
Parameters
firstThe beginning of the range to be removed.
lastThe end of the range to be removed.
Returns
Iterator to the first element remaining beyond the removed elements or end() if no such element exists.
Exceptions
<ahref="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the erased elements and iterators pointing to the elements behind the erased range (towards the end; except iterators equal to end()).
Complexity
Linear (in std::distance(first, end())).
See also
erase(iterator), rerase(iterator), rerase(iterator, iterator), erase_begin(size_type), erase_end(size_type), clear()
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::erase_begin ( size_type  n)
inline

Remove first n elements (with constant complexity for scalar types).

Precondition
n <= size()
Postcondition
The n elements at the beginning of the circular_buffer will be removed.
Parameters
nThe number of elements to be removed.
Exceptions
<ahref="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything. (I.e. no throw in case of scalars.)
Iterator Invalidation
Invalidates iterators pointing to the first n erased elements.
Complexity
Constant (in n) for scalar types; linear for other types.
Note
This method has been specially designed for types which do not require an explicit destructruction (e.g. integer, float or a pointer). For these scalar types a call to a destructor is not required which makes it possible to implement the "erase from beginning" operation with a constant complexity. For non-sacalar types the complexity is linear (hence the explicit destruction is needed) and the implementation is actually equivalent to rerase(begin(), begin() + n).
See also
erase(iterator), erase(iterator, iterator), rerase(iterator), rerase(iterator, iterator), erase_end(size_type), clear()

Referenced by boost::circular_buffer< Sample >::erase_begin().

template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::erase_end ( size_type  n)
inline

Remove last n elements (with constant complexity for scalar types).

Precondition
n <= size()
Postcondition
The n elements at the end of the circular_buffer will be removed.
Parameters
nThe number of elements to be removed.
Exceptions
<ahref="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything. (I.e. no throw in case of scalars.)
Iterator Invalidation
Invalidates iterators pointing to the last n erased elements.
Complexity
Constant (in n) for scalar types; linear for other types.
Note
This method has been specially designed for types which do not require an explicit destructruction (e.g. integer, float or a pointer). For these scalar types a call to a destructor is not required which makes it possible to implement the "erase from end" operation with a constant complexity. For non-sacalar types the complexity is linear (hence the explicit destruction is needed) and the implementation is actually equivalent to erase(end() - n, end()).
See also
erase(iterator), erase(iterator, iterator), rerase(iterator), rerase(iterator, iterator), erase_begin(size_type), clear()

Referenced by boost::circular_buffer< Sample >::erase_end().

template<class T, class Alloc>
reference boost::circular_buffer< T, Alloc >::front ( )
inline

Get the first element.

Precondition
!empty()
Returns
A reference to the first element of the circular_buffer.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
back()

Referenced by boost::circular_buffer< Sample >::rotate().

template<class T, class Alloc>
const_reference boost::circular_buffer< T, Alloc >::front ( ) const
inline

Get the first element.

Precondition
!empty()
Returns
A const reference to the first element of the circular_buffer.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
back() const
template<class T, class Alloc>
bool boost::circular_buffer< T, Alloc >::full ( ) const
inline

Is the circular_buffer full?

Returns
true if the number of elements stored in the circular_buffer equals the capacity of the circular_buffer; false otherwise.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
empty()

Referenced by boost::circular_buffer< Sample >::rotate().

template<class T, class Alloc>
allocator_type boost::circular_buffer< T, Alloc >::get_allocator ( ) const
inline

Get the allocator.

Returns
The allocator.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
get_allocator() for obtaining an allocator reference.

Referenced by boost::circular_buffer_space_optimized< T, Alloc >::operator=(), and boost::circular_buffer< Sample >::operator=().

template<class T, class Alloc>
allocator_type& boost::circular_buffer< T, Alloc >::get_allocator ( )
inline

Get the allocator reference.

Returns
A reference to the allocator.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
Note
This method was added in order to optimize obtaining of the allocator with a state, although use of stateful allocators in STL is discouraged.
See also
get_allocator() const
template<class T, class Alloc>
iterator boost::circular_buffer< T, Alloc >::insert ( iterator  pos,
param_value_type  item 
)
inline

Insert an element at the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer or its end.
Postcondition
The item will be inserted at the position pos.
If the circular_buffer is full, the first element will be overwritten. If the circular_buffer is full and the pos points to begin(), then the item will not be inserted. If the capacity is 0, nothing will be inserted.
Parameters
posAn iterator specifying the position where the item will be inserted.
itemThe element to be inserted.
Returns
Iterator to the inserted element or begin() if the item is not inserted. (See the Effect.)
Exceptions
WhateverT::T(const T&) throws. Whatever T::operator = (const T&) throws. Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the elements at the insertion point (including pos) and iterators behind the insertion point (towards the end; except iterators equal to end()). It also invalidates iterators pointing to the overwritten element.
Complexity
Linear (in std::distance(pos, end())).
See also
insert(iterator, size_type, value_type), insert(iterator, InputIterator, InputIterator), rinsert(iterator, value_type), rinsert(iterator, size_type, value_type), rinsert(iterator, InputIterator, InputIterator)

Referenced by boost::circular_buffer_space_optimized< T, Alloc >::insert(), boost::circular_buffer< Sample >::insert(), and boost::circular_buffer< Sample >::resize().

template<class T, class Alloc>
iterator boost::circular_buffer< T, Alloc >::insert ( iterator  pos,
rvalue_type  item 
)
inline

Insert an element at the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer or its end.
Postcondition
The item will be inserted at the position pos.
If the circular_buffer is full, the first element will be overwritten. If the circular_buffer is full and the pos points to begin(), then the item will not be inserted. If the capacity is 0, nothing will be inserted.
Parameters
posAn iterator specifying the position where the item will be inserted.
itemThe element to be inserted.
Returns
Iterator to the inserted element or begin() if the item is not inserted. (See the Effect.)
Exceptions
WhateverT::T(T&&) throws. Whatever T::operator = (T&&) throws. Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the elements at the insertion point (including pos) and iterators behind the insertion point (towards the end; except iterators equal to end()). It also invalidates iterators pointing to the overwritten element.
Complexity
Linear (in std::distance(pos, end())).
See also
insert(iterator, size_type, value_type), insert(iterator, InputIterator, InputIterator), rinsert(iterator, value_type), rinsert(iterator, size_type, value_type), rinsert(iterator, InputIterator, InputIterator)
template<class T, class Alloc>
iterator boost::circular_buffer< T, Alloc >::insert ( iterator  pos)
inline

Insert a default-constructed element at the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer or its end.
Postcondition
The item will be inserted at the position pos.
If the circular_buffer is full, the first element will be overwritten. If the circular_buffer is full and the pos points to begin(), then the item will not be inserted. If the capacity is 0, nothing will be inserted.
Parameters
posAn iterator specifying the position where the item will be inserted.
Returns
Iterator to the inserted element or begin() if the item is not inserted. (See the Effect.)
Exceptions
WhateverT::T() throws. Whatever T::T(T&&) throws. Whatever T::operator = (T&&) throws. Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the elements at the insertion point (including pos) and iterators behind the insertion point (towards the end; except iterators equal to end()). It also invalidates iterators pointing to the overwritten element.
Complexity
Linear (in std::distance(pos, end())).
See also
insert(iterator, size_type, value_type), insert(iterator, InputIterator, InputIterator), rinsert(iterator, value_type), rinsert(iterator, size_type, value_type), rinsert(iterator, InputIterator, InputIterator)
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::insert ( iterator  pos,
size_type  n,
param_value_type  item 
)
inline

Insert n copies of the item at the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer or its end.
Postcondition
The number of min[n, (pos - begin()) + reserve()] elements will be inserted at the position pos.
The number of min[pos - begin(), max[0, n - reserve()]] elements will be overwritten at the beginning of the circular_buffer.
(See Example for the explanation.)
Parameters
posAn iterator specifying the position where the items will be inserted.
nThe number of items the to be inserted.
itemThe element whose copies will be inserted.
Exceptions
WhateverT::T(const T&) throws. Whatever T::operator = (const T&) throws. Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operations in the Throws section do not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the elements at the insertion point (including pos) and iterators behind the insertion point (towards the end; except iterators equal to end()). It also invalidates iterators pointing to the overwritten elements.
Complexity
Linear (in min[capacity(), std::distance(pos, end()) + n]).
Example
Consider a circular_buffer with the capacity of 6 and the size of 4. Its internal buffer may look like the one below.

|1|2|3|4| | |
p ___^

After inserting 5 elements at the position p:

insert(p, (size_t)5, 0);

actually only 4 elements get inserted and elements 1 and 2 are overwritten. This is due to the fact the insert operation preserves the capacity. After insertion the internal buffer looks like this:

|0|0|0|0|3|4|

For comparison if the capacity would not be preserved the internal buffer would then result in |1|2|0|0|0|0|0|3|4|.
See also
insert(iterator, value_type), insert(iterator, InputIterator, InputIterator), rinsert(iterator, value_type), rinsert(iterator, size_type, value_type), rinsert(iterator, InputIterator, InputIterator)
template<class T, class Alloc>
template<class InputIterator >
void boost::circular_buffer< T, Alloc >::insert ( iterator  pos,
InputIterator  first,
InputIterator  last 
)
inline

Insert the range [first, last) at the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer or its end.
Valid range [first, last) where first and last meet the requirements of an InputIterator.
Postcondition
Elements from the range [first + max[0, distance(first, last) - (pos - begin()) - reserve()], last) will be inserted at the position pos.
The number of min[pos - begin(), max[0, distance(first, last) - reserve()]] elements will be overwritten at the beginning of the circular_buffer.
(See Example for the explanation.)
Parameters
posAn iterator specifying the position where the range will be inserted.
firstThe beginning of the range to be inserted.
lastThe end of the range to be inserted.
Exceptions
WhateverT::T(const T&) throws if the InputIterator is not a move iterator. Whatever T::operator = (const T&) throws if the InputIterator is not a move iterator. Whatever T::T(T&&) throws if the InputIterator is a move iterator. Whatever T::operator = (T&&) throws if the InputIterator is a move iterator.
Exception Safety
Basic; no-throw if the operations in the Throws section do not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the elements at the insertion point (including pos) and iterators behind the insertion point (towards the end; except iterators equal to end()). It also invalidates iterators pointing to the overwritten elements.
Complexity
Linear (in [std::distance(pos, end()) + std::distance(first, last)]; in min[capacity(), std::distance(pos, end()) + std::distance(first, last)] if the InputIterator is a RandomAccessIterator).
Example
Consider a circular_buffer with the capacity of 6 and the size of 4. Its internal buffer may look like the one below.

|1|2|3|4| | |
p ___^

After inserting a range of elements at the position p:

int array[] = { 5, 6, 7, 8, 9 };
insert(p, array, array + 5);

actually only elements 6, 7, 8 and 9 from the specified range get inserted and elements 1 and 2 are overwritten. This is due to the fact the insert operation preserves the capacity. After insertion the internal buffer looks like this:

|6|7|8|9|3|4|

For comparison if the capacity would not be preserved the internal buffer would then result in |1|2|5|6|7|8|9|3|4|.
See also
insert(iterator, value_type), insert(iterator, size_type, value_type), rinsert(iterator, value_type), rinsert(iterator, size_type, value_type), rinsert(iterator, InputIterator, InputIterator)
template<class T, class Alloc>
bool boost::circular_buffer< T, Alloc >::is_linearized ( ) const
inline

Is the circular_buffer linearized?

Returns
true if the internal buffer is linearized into a continuous array (i.e. the circular_buffer meets a condition &(*this)[0] < &(*this)[1] < ... < &(*this)[size() - 1]); false otherwise.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
linearize(), array_one(), array_two()
template<class T, class Alloc>
pointer boost::circular_buffer< T, Alloc >::linearize ( )
inline

Linearize the internal buffer into a continuous array.

This method can be useful when passing the stored data into a legacy C API as an array.

Postcondition
&(*this)[0] < &(*this)[1] < ... < &(*this)[size() - 1]
Returns
A pointer to the beginning of the array or 0 if empty.
Exceptions
<ahref="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operations in the Throws section do not throw anything.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (except iterators equal to end()); does not invalidate any iterators if the postcondition (the Effect) is already met prior calling this method.
Complexity
Linear (in the size of the circular_buffer); constant if the postcondition (the Effect) is already met.
Warning
In general invoking any method which modifies the internal state of the circular_buffer may delinearize the internal buffer and invalidate the returned pointer.
See also
array_one() and array_two() for the other option how to pass data into a legacy C API; is_linearized(), rotate(const_iterator)
template<class T, class Alloc>
size_type boost::circular_buffer< T, Alloc >::max_size ( ) const
inline

Get the largest possible size or capacity of the circular_buffer.

(It depends on allocator's max_size()).

Returns
The maximum size/capacity the circular_buffer can be set to.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
size(), capacity(), reserve()
template<class T, class Alloc>
circular_buffer<T, Alloc>& boost::circular_buffer< T, Alloc >::operator= ( const circular_buffer< T, Alloc > &  cb)
inline

The assign operator.

Makes this circular_buffer to become a copy of the specified circular_buffer.

Postcondition
*this == cb
Parameters
cbThe circular_buffer to be copied.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws.
Exception Safety
Strong.
Iterator Invalidation
Invalidates all iterators pointing to this circular_buffer (except iterators equal to end()).
Complexity
Linear (in the size of cb).
See also
assign(size_type, const_reference), assign(capacity_type, size_type, const_reference), assign(InputIterator, InputIterator), assign(capacity_type, InputIterator, InputIterator)
template<class T, class Alloc>
circular_buffer<T, Alloc>& boost::circular_buffer< T, Alloc >::operator= ( circular_buffer< T, Alloc > &&  cb)
inline

Move assigns content of cb to *this, leaving cb empty.

Precondition
C++ compiler with rvalue references support.
Postcondition
cb.empty()
Parameters
cbcircular_buffer to 'steal' value from.
Exceptions
Nothing.
Complexity
Constant.
template<class T, class Alloc>
reference boost::circular_buffer< T, Alloc >::operator[] ( size_type  index)
inline

Get the element at the index position.

Precondition
0 <= index && index < size()
Parameters
indexThe position of the element.
Returns
A reference to the element at the index position.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
at()
template<class T, class Alloc>
const_reference boost::circular_buffer< T, Alloc >::operator[] ( size_type  index) const
inline

Get the element at the index position.

Precondition
0 <= index && index < size()
Parameters
indexThe position of the element.
Returns
A const reference to the element at the index position.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
at() const
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::pop_back ( )
inline

Remove the last element from the circular_buffer.

Precondition
!empty()
Postcondition
The last element is removed from the circular_buffer.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Invalidates only iterators pointing to the removed element.
Complexity
Constant (in the size of the circular_buffer).
See also
pop_front(), push_back(const_reference), push_front(const_reference)

Referenced by boost::circular_buffer_space_optimized< T, Alloc >::pop_back(), and boost::circular_buffer< Sample >::rotate().

template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::pop_front ( )
inline

Remove the first element from the circular_buffer.

Precondition
!empty()
Postcondition
The first element is removed from the circular_buffer.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Invalidates only iterators pointing to the removed element.
Complexity
Constant (in the size of the circular_buffer).
See also
pop_back(), push_back(const_reference), push_front(const_reference)

Referenced by boost::circular_buffer_space_optimized< T, Alloc >::pop_front(), and boost::circular_buffer< Sample >::rotate().

template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::push_back ( param_value_type  item)
inline

Insert a new element at the end of the circular_buffer.

Postcondition
if capacity() > 0 then back() == item
If the circular_buffer is full, the first element will be removed. If the capacity is 0, nothing will be inserted.
Parameters
itemThe element to be inserted.
Exceptions
WhateverT::T(const T&) throws. Whatever T::operator = (const T&) throws.
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Does not invalidate any iterators with the exception of iterators pointing to the overwritten element.
Complexity
Constant (in the size of the circular_buffer).
See also
push_front(const_reference), pop_back(), pop_front()
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::push_back ( rvalue_type  item)
inline

Insert a new element at the end of the circular_buffer using rvalue references or rvalues references emulation.

Postcondition
if capacity() > 0 then back() == item
If the circular_buffer is full, the first element will be removed. If the capacity is 0, nothing will be inserted.
Parameters
itemThe element to be inserted.
Exceptions
WhateverT::T(T&&) throws. Whatever T::operator = (T&&) throws.
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Does not invalidate any iterators with the exception of iterators pointing to the overwritten element.
Complexity
Constant (in the size of the circular_buffer).
See also
push_front(const_reference), pop_back(), pop_front()
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::push_back ( )
inline

Insert a new default-constructed element at the end of the circular_buffer.

Postcondition
if capacity() > 0 then back() == item
If the circular_buffer is full, the first element will be removed. If the capacity is 0, nothing will be inserted.
Exceptions
WhateverT::T() throws. Whatever T::T(T&&) throws. Whatever T::operator = (T&&) throws.
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Does not invalidate any iterators with the exception of iterators pointing to the overwritten element.
Complexity
Constant (in the size of the circular_buffer).
See also
push_front(const_reference), pop_back(), pop_front()

Referenced by boost::circular_buffer_space_optimized< T, Alloc >::push_back(), boost::circular_buffer< Sample >::push_back(), and boost::circular_buffer< Sample >::rotate().

template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::push_front ( param_value_type  item)
inline

Insert a new element at the beginning of the circular_buffer.

Postcondition
if capacity() > 0 then front() == item
If the circular_buffer is full, the last element will be removed. If the capacity is 0, nothing will be inserted.
Parameters
itemThe element to be inserted.
Exceptions
WhateverT::T(const T&) throws. Whatever T::operator = (const T&) throws.
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Does not invalidate any iterators with the exception of iterators pointing to the overwritten element.
Complexity
Constant (in the size of the circular_buffer).
See also
push_back(const_reference), pop_back(), pop_front()
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::push_front ( rvalue_type  item)
inline

Insert a new element at the beginning of the circular_buffer using rvalue references or rvalues references emulation.

Postcondition
if capacity() > 0 then front() == item
If the circular_buffer is full, the last element will be removed. If the capacity is 0, nothing will be inserted.
Parameters
itemThe element to be inserted.
Exceptions
WhateverT::T(T&&) throws. Whatever T::operator = (T&&) throws.
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Does not invalidate any iterators with the exception of iterators pointing to the overwritten element.
Complexity
Constant (in the size of the circular_buffer).
See also
push_back(const_reference), pop_back(), pop_front()
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::push_front ( )
inline

Insert a new default-constructed element at the beginning of the circular_buffer.

Postcondition
if capacity() > 0 then front() == item
If the circular_buffer is full, the last element will be removed. If the capacity is 0, nothing will be inserted.
Exceptions
WhateverT::T() throws. Whatever T::T(T&&) throws. Whatever T::operator = (T&&) throws.
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Does not invalidate any iterators with the exception of iterators pointing to the overwritten element.
Complexity
Constant (in the size of the circular_buffer).
See also
push_back(const_reference), pop_back(), pop_front()

Referenced by boost::circular_buffer_space_optimized< T, Alloc >::push_front(), boost::circular_buffer< Sample >::push_front(), and boost::circular_buffer< Sample >::rotate().

template<class T, class Alloc>
reverse_iterator boost::circular_buffer< T, Alloc >::rbegin ( )
inline

Get the iterator pointing to the beginning of the "reversed" circular_buffer.

Returns
A reverse random access iterator pointing to the last element of the circular_buffer. If the circular_buffer is empty it returns an iterator equal to the one returned by rend().
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
rend(), begin(), end()
template<class T, class Alloc>
const_reverse_iterator boost::circular_buffer< T, Alloc >::rbegin ( ) const
inline

Get the const iterator pointing to the beginning of the "reversed" circular_buffer.

Returns
A const reverse random access iterator pointing to the last element of the circular_buffer. If the circular_buffer is empty it returns an iterator equal to the one returned by rend() const.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
rend() const, begin() const, end() const
template<class T, class Alloc>
reverse_iterator boost::circular_buffer< T, Alloc >::rend ( )
inline

Get the iterator pointing to the end of the "reversed" circular_buffer.

Returns
A reverse random access iterator pointing to the element "one before" the first element of the circular_buffer. If the circular_buffer is empty it returns an iterator equal to the one returned by rbegin().
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
rbegin(), begin(), end()
template<class T, class Alloc>
const_reverse_iterator boost::circular_buffer< T, Alloc >::rend ( ) const
inline

Get the const iterator pointing to the end of the "reversed" circular_buffer.

Returns
A const reverse random access iterator pointing to the element "one before" the first element of the circular_buffer. If the circular_buffer is empty it returns an iterator equal to the one returned by rbegin() const.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
rbegin() const, begin() const, end() const
template<class T, class Alloc>
iterator boost::circular_buffer< T, Alloc >::rerase ( iterator  pos)
inline

Remove an element at the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer (but not an end()).
Postcondition
The element at the position pos is removed.
Parameters
posAn iterator pointing at the element to be removed.
Returns
Iterator to the first element remaining in front of the removed element or begin() if no such element exists.
Exceptions
<ahref="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the erased element and iterators pointing to the elements in front of the erased element (towards the beginning).
Complexity
Linear (in std::distance(begin(), pos)).
Note
This method is symetric to the erase(iterator) method and is more effective than erase(iterator) if the iterator pos is close to the beginning of the circular_buffer. (See the Complexity.)
See also
erase(iterator), erase(iterator, iterator), rerase(iterator, iterator), erase_begin(size_type), erase_end(size_type), clear()

Referenced by boost::circular_buffer_space_optimized< T, Alloc >::rerase(), boost::circular_buffer< Sample >::rresize(), and boost::circular_buffer_space_optimized< T, Alloc >::rset_capacity().

template<class T, class Alloc>
iterator boost::circular_buffer< T, Alloc >::rerase ( iterator  first,
iterator  last 
)
inline

Erase the range [first, last).

Precondition
Valid range [first, last).
Postcondition
The elements from the range [first, last) are removed. (If first == last nothing is removed.)
Parameters
firstThe beginning of the range to be removed.
lastThe end of the range to be removed.
Returns
Iterator to the first element remaining in front of the removed elements or begin() if no such element exists.
Exceptions
<ahref="circular_buffer/implementation.html#circular_buffer.implementation.exceptions_of_move_if_noexcept_t">Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operation in the Throws section does not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the erased elements and iterators pointing to the elements in front of the erased range (towards the beginning).
Complexity
Linear (in std::distance(begin(), last)).
Note
This method is symetric to the erase(iterator, iterator) method and is more effective than erase(iterator, iterator) if std::distance(begin(), first) is lower that std::distance(last, end()).
See also
erase(iterator), erase(iterator, iterator), rerase(iterator), erase_begin(size_type), erase_end(size_type), clear()
template<class T, class Alloc>
size_type boost::circular_buffer< T, Alloc >::reserve ( ) const
inline

Get the maximum number of elements which can be inserted into the circular_buffer without overwriting any of already stored elements.

Returns
capacity() - size()
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Does not invalidate any iterators.
Complexity
Constant (in the size of the circular_buffer).
See also
capacity(), size(), max_size()
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::resize ( size_type  new_size,
param_value_type  item = value_type() 
)
inline

Change the size of the circular_buffer.

Postcondition
size() == new_size && capacity() >= new_size

If the new size is greater than the current size, copies of item will be inserted at the back of the of the circular_buffer in order to achieve the desired size. In the case the resulting size exceeds the current capacity the capacity will be set to new_size.
If the current number of elements stored in the circular_buffer is greater than the desired new size then number of [size() - new_size] last elements will be removed. (The capacity will remain unchanged.)
Parameters
new_sizeThe new size.
itemThe element the circular_buffer will be filled with in order to gain the requested size. (See the Effect.)
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws or nothing if T::T(T&&) is noexcept.
Exception Safety
Basic.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (except iterators equal to end()) if the new size is greater than the current capacity. Invalidates iterators pointing to the removed elements if the new size is lower that the original size. Otherwise it does not invalidate any iterator.
Complexity
Linear (in the new size of the circular_buffer).
See also
rresize(size_type, const_reference), set_capacity(capacity_type)
template<class T, class Alloc>
iterator boost::circular_buffer< T, Alloc >::rinsert ( iterator  pos,
param_value_type  item 
)
inline

Insert an element before the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer or its end.
Postcondition
The item will be inserted before the position pos.
If the circular_buffer is full, the last element will be overwritten. If the circular_buffer is full and the pos points to end(), then the item will not be inserted. If the capacity is 0, nothing will be inserted.
Parameters
posAn iterator specifying the position before which the item will be inserted.
itemThe element to be inserted.
Returns
Iterator to the inserted element or end() if the item is not inserted. (See the Effect.)
Exceptions
WhateverT::T(const T&) throws. Whatever T::operator = (const T&) throws. Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operations in the Throws section do not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the elements before the insertion point (towards the beginning and excluding pos). It also invalidates iterators pointing to the overwritten element.
Complexity
Linear (in std::distance(begin(), pos)).
See also
rinsert(iterator, size_type, value_type), rinsert(iterator, InputIterator, InputIterator), insert(iterator, value_type), insert(iterator, size_type, value_type), insert(iterator, InputIterator, InputIterator)

Referenced by boost::circular_buffer_space_optimized< T, Alloc >::rinsert(), boost::circular_buffer< Sample >::rinsert(), and boost::circular_buffer< Sample >::rresize().

template<class T, class Alloc>
iterator boost::circular_buffer< T, Alloc >::rinsert ( iterator  pos,
rvalue_type  item 
)
inline

Insert an element before the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer or its end.
Postcondition
The item will be inserted before the position pos.
If the circular_buffer is full, the last element will be overwritten. If the circular_buffer is full and the pos points to end(), then the item will not be inserted. If the capacity is 0, nothing will be inserted.
Parameters
posAn iterator specifying the position before which the item will be inserted.
itemThe element to be inserted.
Returns
Iterator to the inserted element or end() if the item is not inserted. (See the Effect.)
Exceptions
WhateverT::T(T&&) throws. Whatever T::operator = (T&&) throws. Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operations in the Throws section do not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the elements before the insertion point (towards the beginning and excluding pos). It also invalidates iterators pointing to the overwritten element.
Complexity
Linear (in std::distance(begin(), pos)).
See also
rinsert(iterator, size_type, value_type), rinsert(iterator, InputIterator, InputIterator), insert(iterator, value_type), insert(iterator, size_type, value_type), insert(iterator, InputIterator, InputIterator)
template<class T, class Alloc>
iterator boost::circular_buffer< T, Alloc >::rinsert ( iterator  pos)
inline

Insert an element before the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer or its end.
Postcondition
The item will be inserted before the position pos.
If the circular_buffer is full, the last element will be overwritten. If the circular_buffer is full and the pos points to end(), then the item will not be inserted. If the capacity is 0, nothing will be inserted.
Parameters
posAn iterator specifying the position before which the item will be inserted.
Returns
Iterator to the inserted element or end() if the item is not inserted. (See the Effect.)
Exceptions
WhateverT::T() throws. Whatever T::T(T&&) throws. Whatever T::operator = (T&&) throws. Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operations in the Throws section do not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the elements before the insertion point (towards the beginning and excluding pos). It also invalidates iterators pointing to the overwritten element.
Complexity
Linear (in std::distance(begin(), pos)).
See also
rinsert(iterator, size_type, value_type), rinsert(iterator, InputIterator, InputIterator), insert(iterator, value_type), insert(iterator, size_type, value_type), insert(iterator, InputIterator, InputIterator)
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::rinsert ( iterator  pos,
size_type  n,
param_value_type  item 
)
inline

Insert n copies of the item before the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer or its end.
Postcondition
The number of min[n, (end() - pos) + reserve()] elements will be inserted before the position pos.
The number of min[end() - pos, max[0, n - reserve()]] elements will be overwritten at the end of the circular_buffer.
(See Example for the explanation.)
Parameters
posAn iterator specifying the position where the items will be inserted.
nThe number of items the to be inserted.
itemThe element whose copies will be inserted.
Exceptions
WhateverT::T(const T&) throws. Whatever T::operator = (const T&) throws. Exceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the operations in the Throws section do not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the elements before the insertion point (towards the beginning and excluding pos). It also invalidates iterators pointing to the overwritten elements.
Complexity
Linear (in min[capacity(), std::distance(begin(), pos) + n]).
Example
Consider a circular_buffer with the capacity of 6 and the size of 4. Its internal buffer may look like the one below.

|1|2|3|4| | |
p ___^

After inserting 5 elements before the position p:

rinsert(p, (size_t)5, 0);

actually only 4 elements get inserted and elements 3 and 4 are overwritten. This is due to the fact the rinsert operation preserves the capacity. After insertion the internal buffer looks like this:

|1|2|0|0|0|0|

For comparison if the capacity would not be preserved the internal buffer would then result in |1|2|0|0|0|0|0|3|4|.
See also
rinsert(iterator, value_type), rinsert(iterator, InputIterator, InputIterator), insert(iterator, value_type), insert(iterator, size_type, value_type), insert(iterator, InputIterator, InputIterator)
template<class T, class Alloc>
template<class InputIterator >
void boost::circular_buffer< T, Alloc >::rinsert ( iterator  pos,
InputIterator  first,
InputIterator  last 
)
inline

Insert the range [first, last) before the specified position.

Precondition
pos is a valid iterator pointing to the circular_buffer or its end.
Valid range [first, last) where first and last meet the requirements of an InputIterator.
Postcondition
Elements from the range [first, last - max[0, distance(first, last) - (end() - pos) - reserve()]) will be inserted before the position pos.
The number of min[end() - pos, max[0, distance(first, last) - reserve()]] elements will be overwritten at the end of the circular_buffer.
(See Example for the explanation.)
Parameters
posAn iterator specifying the position where the range will be inserted.
firstThe beginning of the range to be inserted.
lastThe end of the range to be inserted.
Exceptions
WhateverT::T(const T&) throws if the InputIterator is not a move iterator. Whatever T::operator = (const T&) throws if the InputIterator is not a move iterator. Whatever T::T(T&&) throws if the InputIterator is a move iterator. Whatever T::operator = (T&&) throws if the InputIterator is a move iterator.
Exception Safety
Basic; no-throw if the operations in the Throws section do not throw anything.
Iterator Invalidation
Invalidates iterators pointing to the elements before the insertion point (towards the beginning and excluding pos). It also invalidates iterators pointing to the overwritten elements.
Complexity
Linear (in [std::distance(begin(), pos) + std::distance(first, last)]; in min[capacity(), std::distance(begin(), pos) + std::distance(first, last)] if the InputIterator is a RandomAccessIterator).
Example
Consider a circular_buffer with the capacity of 6 and the size of 4. Its internal buffer may look like the one below.

|1|2|3|4| | |
p ___^

After inserting a range of elements before the position p:

int array[] = { 5, 6, 7, 8, 9 };
insert(p, array, array + 5);

actually only elements 5, 6, 7 and 8 from the specified range get inserted and elements 3 and 4 are overwritten. This is due to the fact the rinsert operation preserves the capacity. After insertion the internal buffer looks like this:

|1|2|5|6|7|8|

For comparison if the capacity would not be preserved the internal buffer would then result in |1|2|5|6|7|8|9|3|4|.
See also
rinsert(iterator, value_type), rinsert(iterator, size_type, value_type), insert(iterator, value_type), insert(iterator, size_type, value_type), insert(iterator, InputIterator, InputIterator)
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::rotate ( const_iterator  new_begin)
inline

Rotate elements in the circular_buffer.

A more effective implementation of std::rotate.

Precondition
new_begin is a valid iterator pointing to the circular_buffer except its end.
Postcondition
Before calling the method suppose:

m == std::distance(new_begin, end())
n == std::distance(begin(), new_begin)
val_0 == *new_begin, val_1 == *(new_begin + 1), ... val_m == *(new_begin + m)
val_r1 == *(new_begin - 1), val_r2 == *(new_begin - 2), ... val_rn == *(new_begin - n)

then after call to the method:

val_0 == (*this)[0] && val_1 == (*this)[1] && ... && val_m == (*this)[m - 1] && val_r1 == (*this)[m + n - 1] && val_r2 == (*this)[m + n - 2] && ... && val_rn == (*this)[m]
Parameters
new_beginThe new beginning.
Exceptions
SeeExceptions of move_if_noexcept(T&).
Exception Safety
Basic; no-throw if the circular_buffer is full or new_begin points to begin() or if the operations in the Throws section do not throw anything.
Iterator Invalidation
If m < n invalidates iterators pointing to the last m elements (including new_begin, but not iterators equal to end()) else invalidates iterators pointing to the first n elements; does not invalidate any iterators if the circular_buffer is full.
Complexity
Linear (in (std::min)(m, n)); constant if the circular_buffer is full.
See also
std::rotate
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::rresize ( size_type  new_size,
param_value_type  item = value_type() 
)
inline

Change the size of the circular_buffer.

Postcondition
size() == new_size && capacity() >= new_size

If the new size is greater than the current size, copies of item will be inserted at the front of the of the circular_buffer in order to achieve the desired size. In the case the resulting size exceeds the current capacity the capacity will be set to new_size.
If the current number of elements stored in the circular_buffer is greater than the desired new size then number of [size() - new_size] first elements will be removed. (The capacity will remain unchanged.)
Parameters
new_sizeThe new size.
itemThe element the circular_buffer will be filled with in order to gain the requested size. (See the Effect.)
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws or nothing if T::T(T&&) is noexcept.
Exception Safety
Basic.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (except iterators equal to end()) if the new size is greater than the current capacity. Invalidates iterators pointing to the removed elements if the new size is lower that the original size. Otherwise it does not invalidate any iterator.
Complexity
Linear (in the new size of the circular_buffer).
See also
resize(size_type, const_reference), rset_capacity(capacity_type)
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::rset_capacity ( capacity_type  new_capacity)
inline

Change the capacity of the circular_buffer.

Precondition
If T is a move only type, then compiler shall support noexcept modifiers and move constructor of T must be marked with it (must not throw exceptions).
Postcondition
capacity() == new_capacity && size() <= new_capacity

If the current number of elements stored in the circular_buffer is greater than the desired new capacity then number of [size() - new_capacity] first elements will be removed and the new size will be equal to new_capacity.
Parameters
new_capacityThe new capacity.
Exceptions
An allocation errorif memory is exhausted (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws or nothing if T::T(T&&) is noexcept.
Exception Safety
Strong.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (except iterators equal to end()) if the new capacity is different from the original.
Complexity
Linear (in min[size(), new_capacity]).
See also
set_capacity(capacity_type), rresize(size_type, const_reference)
template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::set_capacity ( capacity_type  new_capacity)
inline

Change the capacity of the circular_buffer.

Precondition
If T is a move only type, then compiler shall support noexcept modifiers and move constructor of T must be marked with it (must not throw exceptions).
Postcondition
capacity() == new_capacity && size() <= new_capacity

If the current number of elements stored in the circular_buffer is greater than the desired new capacity then number of [size() - new_capacity] last elements will be removed and the new size will be equal to new_capacity.
Parameters
new_capacityThe new capacity.
Exceptions
An allocation errorif memory is exhausted, (std::bad_alloc if the standard allocator is used). Whatever T::T(const T&) throws or nothing if T::T(T&&) is noexcept.
Exception Safety
Strong.
Iterator Invalidation
Invalidates all iterators pointing to the circular_buffer (except iterators equal to end()) if the new capacity is different from the original.
Complexity
Linear (in min[size(), new_capacity]).
See also
rset_capacity(capacity_type), resize(size_type, const_reference)

Referenced by boost::accumulators::impl::rolling_window_plus1_impl< Sample >::operator=(), boost::circular_buffer< Sample >::resize(), and boost::circular_buffer< Sample >::rresize().

template<class T, class Alloc>
void boost::circular_buffer< T, Alloc >::swap ( circular_buffer< T, Alloc > &  cb)
inline

Swap the contents of two circular_buffers.

Postcondition
this contains elements of cb and vice versa; the capacity of this equals to the capacity of cb and vice versa.
Parameters
cbThe circular_buffer whose content will be swapped.
Exceptions
Nothing.
Exception Safety
No-throw.
Iterator Invalidation
Invalidates all iterators of both circular_buffers. (On the other hand the iterators still point to the same elements but within another container. If you want to rely on this feature you have to turn the Debug Support off otherwise an assertion will report an error if such invalidated iterator is used.)
Complexity
Constant (in the size of the circular_buffer).
See also
swap(circular_buffer<T, Alloc>&, circular_buffer<T, Alloc>&)

Referenced by boost::circular_buffer< Sample >::operator=(), and boost::circular_buffer_space_optimized< T, Alloc >::swap().

Friends And Related Function Documentation

template<class T, class Alloc>
template<class Buff , class Traits >
friend struct cb_details::iterator
friend

The documentation for this class was generated from the following file: