Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
Aleph::RingBuffer< T >::basic_iterator< IsConst > Class Template Reference

Random-access iterator over the logical window. More...

#include <tpl_ring_buffer.H>

Collaboration diagram for Aleph::RingBuffer< T >::basic_iterator< IsConst >:
[legend]

Public Types

using iterator_category = std::random_access_iterator_tag
 Category.
 
using value_type = T
 Element type.
 
using difference_type = std::ptrdiff_t
 Signed distance type.
 
using reference = std::conditional_t< IsConst, const T &, T & >
 Ref.
 
using pointer = std::conditional_t< IsConst, const T *, T * >
 Ptr.
 

Public Member Functions

 basic_iterator ()=default
 Construct a singular iterator.
 
 basic_iterator (BufPtr rb, const size_t idx) noexcept
 Construct from a buffer and a logical index (internal use).
 
template<bool B>
requires (IsConst and not B)
 basic_iterator (const basic_iterator< B > &it) noexcept
 Convert a mutable iterator into a const iterator.
 
BufPtr buffer () const noexcept
 Buffer this iterator walks (internal use).
 
size_t index () const noexcept
 Current logical index (internal use).
 
reference operator* () const noexcept
 Dereference to the current element.
 
pointer operator-> () const noexcept
 Member access on the current element.
 
reference operator[] (const difference_type i) const noexcept
 Element i logical positions away.
 
basic_iterator & operator++ () noexcept
 Pre-increment.
 
basic_iterator operator++ (int) noexcept
 Post-increment.
 
basic_iterator & operator-- () noexcept
 Pre-decrement.
 
basic_iterator operator-- (int) noexcept
 Post-decrement.
 
basic_iterator & operator+= (const difference_type i) noexcept
 Advance by i logical positions.
 
basic_iterator & operator-= (const difference_type i) noexcept
 Retreat by i logical positions.
 
basic_iterator operator+ (difference_type i) const noexcept
 Iterator i positions forward.
 
basic_iterator operator- (difference_type i) const noexcept
 Iterator i positions backward.
 
difference_type operator- (const basic_iterator &it) const noexcept
 Signed distance between iterators.
 
bool operator== (const basic_iterator &it) const noexcept
 Equality: same buffer and logical position.
 
bool operator!= (const basic_iterator &it) const noexcept
 Inequality: different buffer or logical position.
 
bool operator< (const basic_iterator &it) const noexcept
 Strict ordering by logical position.
 
bool operator<= (const basic_iterator &it) const noexcept
 Ordering by logical position.
 
bool operator> (const basic_iterator &it) const noexcept
 Strict ordering by logical position.
 
bool operator>= (const basic_iterator &it) const noexcept
 Ordering by logical position.
 

Private Types

using BufPtr = std::conditional_t< IsConst, const RingBuffer *, RingBuffer * >
 

Static Private Member Functions

static size_t negative_magnitude (const std::ptrdiff_t i) noexcept
 Return abs(i) for negative signed offsets without signed overflow.
 
static size_t add_offset (const size_t idx, const std::ptrdiff_t i) noexcept
 Add signed offset i to logical index idx.
 
static size_t sub_offset (const size_t idx, const std::ptrdiff_t i) noexcept
 Subtract signed offset i from logical index idx.
 

Private Attributes

BufPtr rb_ = nullptr
 
size_t idx_ = 0
 

Detailed Description

template<typename T>
template<bool IsConst>
class Aleph::RingBuffer< T >::basic_iterator< IsConst >

Random-access iterator over the logical window.

Iterates from the oldest to the newest element. Invalidated by any insertion or extraction.

Template Parameters
IsConstWhether the iterator provides const access.

Definition at line 163 of file tpl_ring_buffer.H.

Member Typedef Documentation

◆ BufPtr

template<typename T >
template<bool IsConst>
using Aleph::RingBuffer< T >::basic_iterator< IsConst >::BufPtr = std::conditional_t<IsConst, const RingBuffer *, RingBuffer *>
private

Definition at line 165 of file tpl_ring_buffer.H.

◆ difference_type

template<typename T >
template<bool IsConst>
using Aleph::RingBuffer< T >::basic_iterator< IsConst >::difference_type = std::ptrdiff_t

Signed distance type.

Definition at line 191 of file tpl_ring_buffer.H.

◆ iterator_category

template<typename T >
template<bool IsConst>
using Aleph::RingBuffer< T >::basic_iterator< IsConst >::iterator_category = std::random_access_iterator_tag

Category.

Definition at line 189 of file tpl_ring_buffer.H.

◆ pointer

template<typename T >
template<bool IsConst>
using Aleph::RingBuffer< T >::basic_iterator< IsConst >::pointer = std::conditional_t<IsConst, const T *, T *>

Ptr.

Definition at line 193 of file tpl_ring_buffer.H.

◆ reference

template<typename T >
template<bool IsConst>
using Aleph::RingBuffer< T >::basic_iterator< IsConst >::reference = std::conditional_t<IsConst, const T &, T &>

Ref.

Definition at line 192 of file tpl_ring_buffer.H.

◆ value_type

template<typename T >
template<bool IsConst>
using Aleph::RingBuffer< T >::basic_iterator< IsConst >::value_type = T

Element type.

Definition at line 190 of file tpl_ring_buffer.H.

Constructor & Destructor Documentation

◆ basic_iterator() [1/3]

template<typename T >
template<bool IsConst>
Aleph::RingBuffer< T >::basic_iterator< IsConst >::basic_iterator ( )
default

Construct a singular iterator.

◆ basic_iterator() [2/3]

template<typename T >
template<bool IsConst>
Aleph::RingBuffer< T >::basic_iterator< IsConst >::basic_iterator ( BufPtr  rb,
const size_t  idx 
)
inlinenoexcept

Construct from a buffer and a logical index (internal use).

Definition at line 199 of file tpl_ring_buffer.H.

◆ basic_iterator() [3/3]

template<typename T >
template<bool IsConst>
template<bool B>
requires (IsConst and not B)
Aleph::RingBuffer< T >::basic_iterator< IsConst >::basic_iterator ( const basic_iterator< B > &  it)
inlinenoexcept

Convert a mutable iterator into a const iterator.

Definition at line 203 of file tpl_ring_buffer.H.

Member Function Documentation

◆ add_offset()

template<typename T >
template<bool IsConst>
static size_t Aleph::RingBuffer< T >::basic_iterator< IsConst >::add_offset ( const size_t  idx,
const std::ptrdiff_t  i 
)
inlinestaticprivatenoexcept

◆ buffer()

template<typename T >
template<bool IsConst>
BufPtr Aleph::RingBuffer< T >::basic_iterator< IsConst >::buffer ( ) const
inlinenoexcept

Buffer this iterator walks (internal use).

Definition at line 207 of file tpl_ring_buffer.H.

References Aleph::RingBuffer< T >::basic_iterator< IsConst >::rb_.

Referenced by Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator==().

◆ index()

◆ negative_magnitude()

template<typename T >
template<bool IsConst>
static size_t Aleph::RingBuffer< T >::basic_iterator< IsConst >::negative_magnitude ( const std::ptrdiff_t  i)
inlinestaticprivatenoexcept

Return abs(i) for negative signed offsets without signed overflow.

Definition at line 171 of file tpl_ring_buffer.H.

Referenced by Aleph::RingBuffer< T >::basic_iterator< IsConst >::add_offset(), and Aleph::RingBuffer< T >::basic_iterator< IsConst >::sub_offset().

◆ operator!=()

template<typename T >
template<bool IsConst>
bool Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator!= ( const basic_iterator< IsConst > &  it) const
inlinenoexcept

Inequality: different buffer or logical position.

Definition at line 307 of file tpl_ring_buffer.H.

References Aleph::blossom_maximum_cardinality_matching().

◆ operator*()

template<typename T >
template<bool IsConst>
reference Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator* ( ) const
inlinenoexcept

Dereference to the current element.

Definition at line 219 of file tpl_ring_buffer.H.

References Aleph::RingBuffer< T >::basic_iterator< IsConst >::idx_, and Aleph::RingBuffer< T >::basic_iterator< IsConst >::rb_.

◆ operator+()

template<typename T >
template<bool IsConst>
basic_iterator Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator+ ( difference_type  i) const
inlinenoexcept

Iterator i positions forward.

Definition at line 281 of file tpl_ring_buffer.H.

References Aleph::blossom_maximum_cardinality_matching().

◆ operator++() [1/2]

template<typename T >
template<bool IsConst>
basic_iterator & Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator++ ( )
inlinenoexcept

Pre-increment.

Definition at line 237 of file tpl_ring_buffer.H.

References Aleph::RingBuffer< T >::basic_iterator< IsConst >::idx_.

◆ operator++() [2/2]

◆ operator+=()

◆ operator-() [1/2]

template<typename T >
template<bool IsConst>
difference_type Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator- ( const basic_iterator< IsConst > &  it) const
inlinenoexcept

◆ operator-() [2/2]

template<typename T >
template<bool IsConst>
basic_iterator Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator- ( difference_type  i) const
inlinenoexcept

Iterator i positions backward.

Definition at line 288 of file tpl_ring_buffer.H.

References Aleph::blossom_maximum_cardinality_matching().

◆ operator--() [1/2]

template<typename T >
template<bool IsConst>
basic_iterator & Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator-- ( )
inlinenoexcept

Pre-decrement.

Definition at line 252 of file tpl_ring_buffer.H.

References Aleph::RingBuffer< T >::basic_iterator< IsConst >::idx_.

◆ operator--() [2/2]

◆ operator-=()

◆ operator->()

template<typename T >
template<bool IsConst>
pointer Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator-> ( ) const
inlinenoexcept

Member access on the current element.

Definition at line 225 of file tpl_ring_buffer.H.

References Aleph::RingBuffer< T >::basic_iterator< IsConst >::idx_.

◆ operator<()

template<typename T >
template<bool IsConst>
bool Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator< ( const basic_iterator< IsConst > &  it) const
inlinenoexcept

◆ operator<=()

template<typename T >
template<bool IsConst>
bool Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator<= ( const basic_iterator< IsConst > &  it) const
inlinenoexcept

◆ operator==()

◆ operator>()

template<typename T >
template<bool IsConst>
bool Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator> ( const basic_iterator< IsConst > &  it) const
inlinenoexcept

◆ operator>=()

template<typename T >
template<bool IsConst>
bool Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator>= ( const basic_iterator< IsConst > &  it) const
inlinenoexcept

◆ operator[]()

◆ sub_offset()

template<typename T >
template<bool IsConst>
static size_t Aleph::RingBuffer< T >::basic_iterator< IsConst >::sub_offset ( const size_t  idx,
const std::ptrdiff_t  i 
)
inlinestaticprivatenoexcept

Subtract signed offset i from logical index idx.

Definition at line 183 of file tpl_ring_buffer.H.

References Aleph::RingBuffer< T >::basic_iterator< IsConst >::negative_magnitude().

Referenced by Aleph::RingBuffer< T >::basic_iterator< IsConst >::operator-=().

Member Data Documentation

◆ idx_

◆ rb_


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