Thrill  0.1
RingBuffer< Type, Allocator > Class Template Reference

Detailed Description

template<typename Type, class Allocator = std::allocator<Type>>
class tlx::RingBuffer< Type, Allocator >

A ring (circular) buffer of static (non-growing) size.

Due to many modulo operations with capacity_, the capacity is rounded up to the next power of two, even for powers of two! This is because otherwise size() == end - begin == 0 after filling the ring buffer, and adding another size_ member requires more book-keeping.

Definition at line 36 of file ring_buffer.hpp.

+ Inheritance diagram for RingBuffer< Type, Allocator >:

#include <ring_buffer.hpp>

Public Types

using alloc_traits = std::allocator_traits< allocator_type >
 
using allocator_type = Allocator
 
using const_pointer = typename allocator_type::const_pointer
 
using const_reference = typename allocator_type::const_reference
 
using difference_type = typename allocator_type::difference_type
 
using pointer = typename allocator_type::pointer
 
using reference = typename allocator_type::reference
 
using size_type = typename allocator_type::size_type
 
using value_type = Type
 

Public Member Functions

 RingBuffer (const Allocator &alloc=allocator_type()) noexcept
 
 RingBuffer (size_t max_size, const Allocator &alloc=allocator_type())
 
 RingBuffer (const RingBuffer &rb)
 copy-constructor: create new ring buffer More...
 
 RingBuffer (RingBuffer &&rb) noexcept
 move-constructor: move buffer More...
 
 ~RingBuffer ()
 
void allocate (size_t max_size)
 allocate buffer More...
 
void deallocate ()
 deallocate buffer More...
 
RingBufferoperator= (const RingBuffer &rb)
 copyable: create new ring buffer More...
 
RingBufferoperator= (RingBuffer &&rb) noexcept
 move-assignment operator: default More...
 
Modifiers
void push_back (const value_type &t)
 add element at the end More...
 
void push_back (value_type &&t)
 add element at the end More...
 
template<typename... Args>
void emplace_back (Args &&... args)
 emplace element at the end More...
 
void push_front (const value_type &t)
 add element at the beginning More...
 
void push_front (value_type &&t)
 add element at the beginning More...
 
template<typename... Args>
void emplace_front (Args &&... args)
 emplace element at the beginning More...
 
void pop_front ()
 remove element at the beginning More...
 
void pop_back ()
 remove element at the end More...
 
void clear ()
 reset buffer contents More...
 
void copy_to (std::vector< value_type > *out) const
 copy all element into the vector More...
 
void move_to (std::vector< value_type > *out)
 move all element from the RingBuffer into the vector More...
 
Element access
reference operator[] (size_type i) noexcept
 Returns a reference to the i-th element. More...
 
const_reference operator[] (size_type i) const noexcept
 Returns a reference to the i-th element. More...
 
reference front () noexcept
 Returns a reference to the first element. More...
 
const_reference front () const noexcept
 Returns a reference to the first element. More...
 
reference back () noexcept
 Returns a reference to the last element. More...
 
const_reference back () const noexcept
 Returns a reference to the last element. More...
 
Capacity
size_type size () const noexcept
 return the number of items in the buffer More...
 
size_t max_size () const noexcept
 return the maximum number of items in the buffer. More...
 
size_t capacity () const noexcept
 return actual capacity of the ring buffer. More...
 
bool empty () const noexcept
 returns true if no items are in the buffer More...
 
Serialization Methods for cereal
template<class Archive >
void save (Archive &ar) const
 
template<class Archive >
void load (Archive &ar)
 

Protected Attributes

allocator_type alloc_
 used allocator More...
 
size_type begin_ = 0
 iterator at current begin of ring buffer More...
 
size_t capacity_
 
Type * data_
 the circular buffer of static size. More...
 
size_type end_ = 0
 iterator at current begin of ring buffer More...
 
size_t mask_
 one-bits mask for calculating modulo of capacity using AND-mask. More...
 
size_t max_size_
 

Member Typedef Documentation

◆ alloc_traits

using alloc_traits = std::allocator_traits<allocator_type>

Definition at line 42 of file ring_buffer.hpp.

◆ allocator_type

using allocator_type = Allocator

Definition at line 40 of file ring_buffer.hpp.

◆ const_pointer

using const_pointer = typename allocator_type::const_pointer

Definition at line 47 of file ring_buffer.hpp.

◆ const_reference

using const_reference = typename allocator_type::const_reference

Definition at line 45 of file ring_buffer.hpp.

◆ difference_type

using difference_type = typename allocator_type::difference_type

Definition at line 50 of file ring_buffer.hpp.

◆ pointer

using pointer = typename allocator_type::pointer

Definition at line 46 of file ring_buffer.hpp.

◆ reference

using reference = typename allocator_type::reference

Definition at line 44 of file ring_buffer.hpp.

◆ size_type

using size_type = typename allocator_type::size_type

Definition at line 49 of file ring_buffer.hpp.

◆ value_type

using value_type = Type

Definition at line 39 of file ring_buffer.hpp.

Constructor & Destructor Documentation

◆ RingBuffer() [1/4]

RingBuffer ( const Allocator &  alloc = allocator_type())
inlineexplicitnoexcept

Definition at line 57 of file ring_buffer.hpp.

◆ RingBuffer() [2/4]

RingBuffer ( size_t  max_size,
const Allocator &  alloc = allocator_type() 
)
inlineexplicit

Definition at line 61 of file ring_buffer.hpp.

◆ RingBuffer() [3/4]

RingBuffer ( const RingBuffer< Type, Allocator > &  rb)
inline

copy-constructor: create new ring buffer

Definition at line 69 of file ring_buffer.hpp.

◆ RingBuffer() [4/4]

RingBuffer ( RingBuffer< Type, Allocator > &&  rb)
inlinenoexcept

move-constructor: move buffer

Definition at line 107 of file ring_buffer.hpp.

◆ ~RingBuffer()

~RingBuffer ( )
inline

Definition at line 138 of file ring_buffer.hpp.

Member Function Documentation

◆ allocate()

void allocate ( size_t  max_size)
inline

◆ back() [1/2]

reference back ( )
inlinenoexcept

Returns a reference to the last element.

Definition at line 274 of file ring_buffer.hpp.

Referenced by RingBuffer< Input >::load().

◆ back() [2/2]

const_reference back ( ) const
inlinenoexcept

Returns a reference to the last element.

Definition at line 279 of file ring_buffer.hpp.

◆ capacity()

size_t capacity ( ) const
inlinenoexcept

return actual capacity of the ring buffer.

Definition at line 300 of file ring_buffer.hpp.

◆ clear()

void clear ( )
inline

◆ copy_to()

void copy_to ( std::vector< value_type > *  out) const
inline

copy all element into the vector

Definition at line 233 of file ring_buffer.hpp.

Referenced by DisjointWindowNode< ValueType, Input, WindowFunction, PartialWindowFunction >::PushData().

◆ deallocate()

void deallocate ( )
inline

◆ emplace_back()

void emplace_back ( Args &&...  args)
inline

emplace element at the end

Definition at line 181 of file ring_buffer.hpp.

Referenced by OverlapWindowNode< ValueType, Input, WindowFunction, PartialWindowFunction >::PushData().

◆ emplace_front()

void emplace_front ( Args &&...  args)
inline

emplace element at the beginning

Definition at line 205 of file ring_buffer.hpp.

◆ empty()

bool empty ( ) const
inlinenoexcept

◆ front() [1/2]

reference front ( )
inlinenoexcept

Returns a reference to the first element.

Definition at line 263 of file ring_buffer.hpp.

Referenced by RingBuffer< Input >::move_to().

◆ front() [2/2]

const_reference front ( ) const
inlinenoexcept

Returns a reference to the first element.

Definition at line 268 of file ring_buffer.hpp.

◆ load()

void load ( Archive &  ar)
inline

Definition at line 322 of file ring_buffer.hpp.

◆ max_size()

size_t max_size ( ) const
inlinenoexcept

return the maximum number of items in the buffer.

Definition at line 295 of file ring_buffer.hpp.

Referenced by RingBuffer< Input >::allocate().

◆ move_to()

void move_to ( std::vector< value_type > *  out)
inline

◆ operator=() [1/2]

RingBuffer& operator= ( const RingBuffer< Type, Allocator > &  rb)
inline

copyable: create new ring buffer

Definition at line 83 of file ring_buffer.hpp.

◆ operator=() [2/2]

RingBuffer& operator= ( RingBuffer< Type, Allocator > &&  rb)
inlinenoexcept

move-assignment operator: default

Definition at line 120 of file ring_buffer.hpp.

◆ operator[]() [1/2]

reference operator[] ( size_type  i)
inlinenoexcept

Returns a reference to the i-th element.

Definition at line 252 of file ring_buffer.hpp.

◆ operator[]() [2/2]

const_reference operator[] ( size_type  i) const
inlinenoexcept

Returns a reference to the i-th element.

Definition at line 257 of file ring_buffer.hpp.

◆ pop_back()

void pop_back ( )
inline

remove element at the end

Definition at line 220 of file ring_buffer.hpp.

◆ pop_front()

◆ push_back() [1/2]

◆ push_back() [2/2]

void push_back ( value_type &&  t)
inline

add element at the end

Definition at line 172 of file ring_buffer.hpp.

◆ push_front() [1/2]

void push_front ( const value_type t)
inline

add element at the beginning

Definition at line 189 of file ring_buffer.hpp.

◆ push_front() [2/2]

void push_front ( value_type &&  t)
inline

add element at the beginning

Definition at line 196 of file ring_buffer.hpp.

◆ save()

void save ( Archive &  ar) const
inline

Definition at line 315 of file ring_buffer.hpp.

◆ size()

Member Data Documentation

◆ alloc_

◆ begin_

◆ capacity_

size_t capacity_
protected

capacity of data buffer. rounded up from max_size_ to next unequal power of two.

Definition at line 358 of file ring_buffer.hpp.

Referenced by RingBuffer< Input >::allocate(), RingBuffer< Input >::capacity(), RingBuffer< Input >::deallocate(), RingBuffer< Input >::load(), RingBuffer< Input >::operator=(), and RingBuffer< Input >::~RingBuffer().

◆ data_

◆ end_

◆ mask_

◆ max_size_

size_t max_size_
protected

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