emlabcpp
modern opinionated embedded C++ library
emlabcpp::static_circular_buffer< T, N > Class Template Reference

Class implementing circular buffer of any type for up to N elements. More...

#include <static_circular_buffer.h>

Public Types

using index_type = int32_t
 
using value_type = T
 
using size_type = uint32_t
 
using reference = T &
 
using const_reference = T const &
 
using iterator = static_circular_buffer_iterator< T >
 
using const_iterator = static_circular_buffer_iterator< T const >
 

Public Member Functions

 static_circular_buffer () noexcept=default
 
 static_circular_buffer (static_circular_buffer const &other)
 
 static_circular_buffer (static_circular_buffer &&other) noexcept
 
static_circular_bufferoperator= (static_circular_buffer const &other)
 
static_circular_bufferoperator= (static_circular_buffer &&other) noexcept
 
iterator begin ()
 methods for handling the front side of the circular buffer More...
 
const_iterator begin () const
 
std::reverse_iterator< iteratorrbegin ()
 
std::reverse_iterator< const_iteratorrbegin () const
 
reference front ()
 
const_reference front () const
 
take_front ()
 
void pop_front ()
 
void pop_front (size_type n)
 
iterator end ()
 methods for handling the back side of the circular buffer More...
 
const_iterator end () const
 
std::reverse_iterator< iteratorrend ()
 
std::reverse_iterator< const_iteratorrend () const
 
reference back ()
 
const_reference back () const
 
void push_back (T item)
 
template<typename... Args>
T & emplace_back (Args &&... args)
 
constexpr size_type capacity () const
 other methods More...
 
size_type size () const
 
bool empty () const
 
bool full () const
 
void clear ()
 
 ~static_circular_buffer ()
 

Static Public Attributes

static constexpr std::size_t max_size = N
 

Friends

template<typename U >
class static_circular_buffer_iterator
 

Detailed Description

template<typename T, std::size_t N>
class emlabcpp::static_circular_buffer< T, N >

Class implementing circular buffer of any type for up to N elements.

This should work for generic type T, not just simple types.

It is safe in "single consumer single producer" scenario between main loop and interrupts. Because of that the behavior is as follows:

  • on insertion, item is inserted and than index is advanced
  • on removal, item is removed and than index is advanced

In case of copy or move operations, the buffer does not have to store the data internally in same manner, the data are equivavlent only from the perspective of push/pop operations.

Member Typedef Documentation

◆ const_iterator

template<typename T , std::size_t N>
using emlabcpp::static_circular_buffer< T, N >::const_iterator = static_circular_buffer_iterator< T const >

◆ const_reference

template<typename T , std::size_t N>
using emlabcpp::static_circular_buffer< T, N >::const_reference = T const&

◆ index_type

template<typename T , std::size_t N>
using emlabcpp::static_circular_buffer< T, N >::index_type = int32_t

◆ iterator

template<typename T , std::size_t N>
using emlabcpp::static_circular_buffer< T, N >::iterator = static_circular_buffer_iterator< T >

◆ reference

template<typename T , std::size_t N>
using emlabcpp::static_circular_buffer< T, N >::reference = T&

◆ size_type

template<typename T , std::size_t N>
using emlabcpp::static_circular_buffer< T, N >::size_type = uint32_t

◆ value_type

template<typename T , std::size_t N>
using emlabcpp::static_circular_buffer< T, N >::value_type = T

Constructor & Destructor Documentation

◆ static_circular_buffer() [1/3]

template<typename T , std::size_t N>
emlabcpp::static_circular_buffer< T, N >::static_circular_buffer ( )
defaultnoexcept

◆ static_circular_buffer() [2/3]

template<typename T , std::size_t N>
emlabcpp::static_circular_buffer< T, N >::static_circular_buffer ( static_circular_buffer< T, N > const &  other)
inline

◆ static_circular_buffer() [3/3]

template<typename T , std::size_t N>
emlabcpp::static_circular_buffer< T, N >::static_circular_buffer ( static_circular_buffer< T, N > &&  other)
inlinenoexcept

◆ ~static_circular_buffer()

template<typename T , std::size_t N>
emlabcpp::static_circular_buffer< T, N >::~static_circular_buffer ( )
inline

Member Function Documentation

◆ back() [1/2]

template<typename T , std::size_t N>
reference emlabcpp::static_circular_buffer< T, N >::back ( )
inline

◆ back() [2/2]

template<typename T , std::size_t N>
const_reference emlabcpp::static_circular_buffer< T, N >::back ( ) const
inline

◆ begin() [1/2]

template<typename T , std::size_t N>
iterator emlabcpp::static_circular_buffer< T, N >::begin ( )
inline

methods for handling the front side of the circular buffer

References emlabcpp::N.

◆ begin() [2/2]

template<typename T , std::size_t N>
const_iterator emlabcpp::static_circular_buffer< T, N >::begin ( ) const
inline

References emlabcpp::N.

◆ capacity()

template<typename T , std::size_t N>
constexpr size_type emlabcpp::static_circular_buffer< T, N >::capacity ( ) const
inlineconstexpr

other methods

References emlabcpp::N.

◆ clear()

template<typename T , std::size_t N>
void emlabcpp::static_circular_buffer< T, N >::clear ( )
inline

◆ emplace_back()

template<typename T , std::size_t N>
template<typename... Args>
T& emlabcpp::static_circular_buffer< T, N >::emplace_back ( Args &&...  args)
inline

References emlabcpp::args.

◆ empty()

template<typename T , std::size_t N>
bool emlabcpp::static_circular_buffer< T, N >::empty ( ) const
inline

◆ end() [1/2]

template<typename T , std::size_t N>
iterator emlabcpp::static_circular_buffer< T, N >::end ( )
inline

methods for handling the back side of the circular buffer

References emlabcpp::N.

◆ end() [2/2]

template<typename T , std::size_t N>
const_iterator emlabcpp::static_circular_buffer< T, N >::end ( ) const
inline

References emlabcpp::N.

◆ front() [1/2]

template<typename T , std::size_t N>
reference emlabcpp::static_circular_buffer< T, N >::front ( )
inline

◆ front() [2/2]

template<typename T , std::size_t N>
const_reference emlabcpp::static_circular_buffer< T, N >::front ( ) const
inline

◆ full()

template<typename T , std::size_t N>
bool emlabcpp::static_circular_buffer< T, N >::full ( ) const
inline

◆ operator=() [1/2]

template<typename T , std::size_t N>
static_circular_buffer& emlabcpp::static_circular_buffer< T, N >::operator= ( static_circular_buffer< T, N > &&  other)
inlinenoexcept

◆ operator=() [2/2]

template<typename T , std::size_t N>
static_circular_buffer& emlabcpp::static_circular_buffer< T, N >::operator= ( static_circular_buffer< T, N > const &  other)
inline

◆ pop_front() [1/2]

template<typename T , std::size_t N>
void emlabcpp::static_circular_buffer< T, N >::pop_front ( )
inline

◆ pop_front() [2/2]

template<typename T , std::size_t N>
void emlabcpp::static_circular_buffer< T, N >::pop_front ( size_type  n)
inline

◆ push_back()

template<typename T , std::size_t N>
void emlabcpp::static_circular_buffer< T, N >::push_back ( item)
inline

◆ rbegin() [1/2]

template<typename T , std::size_t N>
std::reverse_iterator< iterator > emlabcpp::static_circular_buffer< T, N >::rbegin ( )
inline

◆ rbegin() [2/2]

template<typename T , std::size_t N>
std::reverse_iterator< const_iterator > emlabcpp::static_circular_buffer< T, N >::rbegin ( ) const
inline

◆ rend() [1/2]

template<typename T , std::size_t N>
std::reverse_iterator< iterator > emlabcpp::static_circular_buffer< T, N >::rend ( )
inline

◆ rend() [2/2]

template<typename T , std::size_t N>
std::reverse_iterator< const_iterator > emlabcpp::static_circular_buffer< T, N >::rend ( ) const
inline

◆ size()

template<typename T , std::size_t N>
size_type emlabcpp::static_circular_buffer< T, N >::size ( ) const
inline

References emlabcpp::f, and emlabcpp::N.

◆ take_front()

template<typename T , std::size_t N>
T emlabcpp::static_circular_buffer< T, N >::take_front ( )
inline

Friends And Related Function Documentation

◆ static_circular_buffer_iterator

template<typename T , std::size_t N>
template<typename U >
friend class static_circular_buffer_iterator
friend

Member Data Documentation

◆ max_size

template<typename T , std::size_t N>
constexpr std::size_t emlabcpp::static_circular_buffer< T, N >::max_size = N
staticconstexpr

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