Skip to content

iox::cxx::forward_list🔗

C++11 compatible uni-directional forward list implementation. More...

#include <forward_list.hpp>

Public Types🔗

Name
using IteratorBase< false > iterator
using IteratorBase< true > const_iterator
using T value_type
using decltype(Capacity) size_type

Public Functions🔗

Name
forward_list()
constructor for an empty list (of T-types elements)
~forward_list()
destructs the list and also calls the destructor of all contained elements
forward_list(const forward_list & rhs)
copy constructor list including elements
forward_list(forward_list && rhs)
move constructor list including elements
forward_list & operator=(const forward_list & rhs)
copy assignment, each element is copied (added) to the constructed list any existing elements in 'this'/lhs are removed (same behaviour as std::list : Assigns new contents to the container, replacing its current contents, and modifying its size accordingly.)
forward_list & operator=(forward_list && rhs)
move assignment, list is cleared and initialized, elements are moved from source list any existing elements in 'this'/lhs are removed (same behaviour as std::list : Assigns new contents to the container, replacing its current contents, and modifying its size accordingly.)
iterator before_begin()
retrieve an interator before first element only allowed for usage in erase_after, insert_after, emplace_after Terminated when content is attemted to read (operator*, operator->)
const_iterator before_begin() const
retrieve a const_iterator before first element only allowed for usage in erase_after, insert_after, emplace_after
const_iterator cbefore_begin() const
const_iterator an interator before first element only allowed for usage in erase_after, insert_after, emplace_after
iterator begin()
default list operation to retrieve an interator to first list element
const_iterator begin() const
default list operation to retrieve an const_iterator to first list element
const_iterator cbegin() const
default list operation to retrieve an const_iterator to first list element
iterator end()
default list operation to retrieve an interator to end of list (behind last valid element) Terminated when content is attemted to read (operator*, operator->)
const_iterator end() const
default list operation to retrieve an const_iterator to end of list (behind last valid element) Terminated when content is attemted to read (operator*, operator->)
const_iterator cend() const
default list operation to retrieve an const_iterator to end of list (behind last valid element) Terminated when content is attemted to read (operator*, operator->)
bool empty() const
list meta information on filling
bool full() const
list meta information on filling
size_type size() const
list meta information on filling
size_type capacity() const
list meta information, maximum number of elements the list can contain
size_type max_size() const
list meta information, maximum number of elements the list can contain
T & front()
Returns a reference to the first element in the container. calling front() on an empty list will terminate() the processing.
const T & front() const
Returns a reference to the first element in the container. calling front() on an empty list will terminate() the processing.
bool push_front(const T & data)
add element to the beginning of the list
bool push_front(T && data)
add element to the beginning of the list via move
bool pop_front()
remove the first element from the begining of the list element destructor will be invoked
void clear()
remove all elements from the list, list will be empty element destructors will be invoked
iterator erase_after(const_iterator beforeToBeErasedIter)
remove next element from linked iterator position element destructors will be invoked recursive calls to erase_after only delete each 2nd element
size_type remove(const T & data)
remove all elements which matches the given comparing element (compare by value) requires a the template type T to have operator== defined.
template \<typename UnaryPredicate >
size_type
remove_if(UnaryPredicate pred)
remove all elements which matches the provided comparison function requires a the template type T to have a operator== defined.
template \<typename... ConstructorArgs>
T &
emplace_front(ConstructorArgs &&... args)
construct element inplace at begining of list
template \<typename... ConstructorArgs>
iterator
emplace_after(const_iterator afterToBeEmplacedIter, ConstructorArgs &&... args)
construct element inplace after the pointed-to element
iterator insert_after(const_iterator citer, const T & data)
insert element after iterator position
iterator insert_after(const_iterator citer, T && data)
add element after the pointed-to element via move

Detailed Description🔗

template <typename T ,
uint64_t Capacity>
class iox::cxx::forward_list;

C++11 compatible uni-directional forward list implementation.

Adjustments in the API were done to not use exceptions and serve the requirement of a data structure movable over shared memory. attempt to add elements to a full list will be ignored. Capacity must at least be 1, (unintended) negative initialization is rejected with compile assertion limitation: concurrency concerns have to be handled by client side.

overview of cxx::forward_list deviations to std::forward_list(C++11)

  • list declaration with mandatory max list size argument
  • member functions don't throw exception but will trigger different failure handling
  • push_front returns a bool (instead of void) informing on successful insertion (true)
  • pop_front returns a bool (instead of void) informing on successful removal (true), otherwise empty (false)
  • emplace_front returns a reference to the inserted element (instead of void), this is C++17-conform
  • remove / remove_if returns a the number of removed elements (instead of void), this is C++20-conform

(yet) missing implementations🔗

  • allocator, difference_type based operations
  • assign, resize, swap, merge, splice_after, reverse, unique, sort
  • list operator==, operator!=, operator<, operator<=, operator>, operator>= Ttype user data to be managed within list

Capacitynumber of maximum list elements a client can push to the list. minimum value is '1'

Public Types Documentation🔗

using iterator🔗

using iox::cxx::forward_list< T, Capacity >::iterator =  IteratorBase<false>;

using const_iterator🔗

using iox::cxx::forward_list< T, Capacity >::const_iterator =  IteratorBase<true>;

using value_type🔗

using iox::cxx::forward_list< T, Capacity >::value_type =  T;

using size_type🔗

using iox::cxx::forward_list< T, Capacity >::size_type =  decltype(Capacity);

Public Functions Documentation🔗

function forward_list🔗

inline forward_list()

constructor for an empty list (of T-types elements)

function ~forward_list🔗

inline ~forward_list()

destructs the list and also calls the destructor of all contained elements

function forward_list🔗

inline forward_list(
    const forward_list & rhs
)

copy constructor list including elements

Parameters:

  • rhs is the list to copy from (same capacity)

function forward_list🔗

inline forward_list(
    forward_list && rhs
)

move constructor list including elements

Parameters:

  • rhs is the list to move-construct elements from (same capacity)

function operator=🔗

forward_list & operator=(
    const forward_list & rhs
)

copy assignment, each element is copied (added) to the constructed list any existing elements in 'this'/lhs are removed (same behaviour as std::list : Assigns new contents to the container, replacing its current contents, and modifying its size accordingly.)

Parameters:

  • rhs is the list to copy from (same capacity)

Return: reference to created list

function operator=🔗

forward_list & operator=(
    forward_list && rhs
)

move assignment, list is cleared and initialized, elements are moved from source list any existing elements in 'this'/lhs are removed (same behaviour as std::list : Assigns new contents to the container, replacing its current contents, and modifying its size accordingly.)

Parameters:

  • rhs is the list to move from ('source', same capacity)

Return: reference to created list

function before_begin🔗

inline iterator before_begin()

retrieve an interator before first element only allowed for usage in erase_after, insert_after, emplace_after Terminated when content is attemted to read (operator*, operator->)

Return: iterator to fictional element before first data element

function before_begin🔗

const_iterator before_begin() const

retrieve a const_iterator before first element only allowed for usage in erase_after, insert_after, emplace_after

Return: iterator to fictional element before first data element

function cbefore_begin🔗

inline const_iterator cbefore_begin() const

const_iterator an interator before first element only allowed for usage in erase_after, insert_after, emplace_after

Return: iterator to fictional element before first data element

function begin🔗

inline iterator begin()

default list operation to retrieve an interator to first list element

Return: iterator to first list element, returns iterator to end() when list is empty

function begin🔗

const_iterator begin() const

default list operation to retrieve an const_iterator to first list element

Return: iterator to first list element, returns iterator to end() when list is empty

function cbegin🔗

inline const_iterator cbegin() const

default list operation to retrieve an const_iterator to first list element

Return: iterator to first list element, returns iterator to end() when list is empty

function end🔗

inline iterator end()

default list operation to retrieve an interator to end of list (behind last valid element) Terminated when content is attemted to read (operator*, operator->)

Return: iterator to end element, does not contain data.

function end🔗

const_iterator end() const

default list operation to retrieve an const_iterator to end of list (behind last valid element) Terminated when content is attemted to read (operator*, operator->)

Return: iterator to end element, does not contain data.

function cend🔗

inline const_iterator cend() const

default list operation to retrieve an const_iterator to end of list (behind last valid element) Terminated when content is attemted to read (operator*, operator->)

Return: iterator to end element, does not contain data.

function empty🔗

inline bool empty() const

list meta information on filling

Return: no elements in list (true), otherwise (false)

function full🔗

inline bool full() const

list meta information on filling

Return: whether list is full (filled with 'capacity' / 'max_size' elements) (true), otherwise (false)

function size🔗

inline size_type size() const

list meta information on filling

Return: current number of elements in list @min returns min 0 @max returns max capacity

function capacity🔗

inline size_type capacity() const

list meta information, maximum number of elements the list can contain

Return: list has been initialized with the following number of elements.

function max_size🔗

inline size_type max_size() const

list meta information, maximum number of elements the list can contain

Return: list has been initialized with the following number of elements, same as capacity()

function front🔗

inline T & front()

Returns a reference to the first element in the container. calling front() on an empty list will terminate() the processing.

Return: reference to the first element

function front🔗

const T & front() const

Returns a reference to the first element in the container. calling front() on an empty list will terminate() the processing.

Return: const reference to the first element

function push_front🔗

inline bool push_front(
    const T & data
)

add element to the beginning of the list

Parameters:

  • data reference to data element

Return: successful insertion (true), otherwise no element could be added to list (e.g. full -> false)

function push_front🔗

inline bool push_front(
    T && data
)

add element to the beginning of the list via move

Parameters:

  • data universal reference perfectly forwarded to client class

Return: successful insertion (true), otherwise no element could be added to list (e.g. full -> false)

function pop_front🔗

inline bool pop_front()

remove the first element from the begining of the list element destructor will be invoked

Return: successful removal (true), otherwise no element could be taken from list (e.g. empty -> false)

function clear🔗

inline void clear()

remove all elements from the list, list will be empty element destructors will be invoked

function erase_after🔗

inline iterator erase_after(
    const_iterator beforeToBeErasedIter
)

remove next element from linked iterator position element destructors will be invoked recursive calls to erase_after only delete each 2nd element

Parameters:

  • beforeToBeErasedIter iterator linking the element before the to-be-removed element

Return: an (non-const_) iterator to the element after the removed element, returns end() element when reached end of list

function remove🔗

inline size_type remove(
    const T & data
)

remove all elements which matches the given comparing element (compare by value) requires a the template type T to have operator== defined.

Parameters:

  • data value to compare to

Return: the number of elements removed, return is C++20-conform

function remove_if🔗

template <typename UnaryPredicate >
inline size_type remove_if(
    UnaryPredicate pred
)

remove all elements which matches the provided comparison function requires a the template type T to have a operator== defined.

Parameters:

  • pred unary predicate which returns true if the element should be removed

Return: the number of elements removed, return is C++20-conform

function emplace_front🔗

template <typename... ConstructorArgs>
inline T & emplace_front(
    ConstructorArgs &&... args
)

construct element inplace at begining of list

Parameters:

  • args T-typed construction parameters (initializer list)

Return: referene to generated element, return is C++17-conform

function emplace_after🔗

template <typename... ConstructorArgs>
inline iterator emplace_after(
    const_iterator afterToBeEmplacedIter,
    ConstructorArgs &&... args
)

construct element inplace after the pointed-to element

Parameters:

  • args T-typed construction parameters (initializer list)
  • afterToBeEmplacedIter position in list to (construct)insert after

Return: iterator to the newly added element

function insert_after🔗

inline iterator insert_after(
    const_iterator citer,
    const T & data
)

insert element after iterator position

Parameters:

  • citer iterator with the position to insert after
  • data reference to element to add

Return: iterator to the newly added element

function insert_after🔗

inline iterator insert_after(
    const_iterator citer,
    T && data
)

add element after the pointed-to element via move

Parameters:

  • citer iterator with the position to insert after
  • data universal reference perfectly forwarded to client class

Return: iterator to the newly added element


Updated on 17 June 2021 at 11:15:26 CEST