iox::cxx::list🔗
C++11 compatible bi-directional list implementation. More...
#include <iceoryx_hoofs/cxx/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 | |
---|---|
list() constructor for an empty list (of T-types elements) |
|
~list() destructs the list and also calls the destructor of all contained elements |
|
list(const list & rhs) copy constructor list including elements |
|
list(list && rhs) move constructor list including elements |
|
list & | operator=(const 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.) |
list & | operator=(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 | 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. |
T & | back() Returns a reference to the last element in the container. calling back() on an empty list will terminate() the processing. |
const T & | back() const Returns a reference to the last element in the container. calling back() 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 | push_back(const T & data) add element to the end of the list |
bool | push_back(T && data) add element to the end of the list via move |
bool | pop_front() remove the first element from the begining of the list element destructor will be invoked |
bool | pop_back() remove the last element from the end 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(const_iterator iter) 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> T & |
emplace_back(ConstructorArgs &&... args) construct element inplace at end of list |
template <typename... ConstructorArgs> iterator |
emplace(const_iterator iter, ConstructorArgs &&... args) construct element inplace at iterator position |
iterator | insert(const_iterator citer, const T & data) insert element before iterator position |
iterator | insert(const_iterator citer, T && data) add element before the pointed-to element via move |
Detailed Description🔗
template <typename T ,
uint64_t Capacity>
class iox::cxx::list;
C++11 compatible bi-directional 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/~_back returns a bool (instead of void) informing on successful insertion (true)
- pop_front/~_back returns a bool (instead of void) informing on successful removal (true), otherwise empty (false)
- emplace_front/~_back 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 / range operations
- assign, resize, swap, merge, splice_after, reverse, rbegin/crbegin, rend/crend, 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::list< T, Capacity >::iterator = IteratorBase<false>;
using const_iterator🔗
using iox::cxx::list< T, Capacity >::const_iterator = IteratorBase<true>;
using value_type🔗
using iox::cxx::list< T, Capacity >::value_type = T;
using size_type🔗
using iox::cxx::list< T, Capacity >::size_type = decltype(Capacity);
Public Functions Documentation🔗
function list🔗
list()
constructor for an empty list (of T-types elements)
function ~list🔗
~list()
destructs the list and also calls the destructor of all contained elements
function list🔗
list(
const list & rhs
)
copy constructor list including elements
Parameters:
- rhs is the list to copy from (same capacity)
function list🔗
list(
list && rhs
)
move constructor list including elements
Parameters:
- rhs is the list to move-construct elements from (same capacity)
function operator=🔗
list & operator=(
const 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=🔗
list & operator=(
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 begin🔗
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🔗
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🔗
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🔗
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🔗
bool empty() const
list meta information on filling
Return: no elements in list (true), otherwise (false)
function full🔗
bool full() const
list meta information on filling
Return: whether list is full (filled with 'capacity' / 'max_size' elements) (true), otherwise (false)
function size🔗
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🔗
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🔗
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🔗
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 back🔗
T & back()
Returns a reference to the last element in the container. calling back() on an empty list will terminate() the processing.
Return: reference to the last element
function back🔗
const T & back() const
Returns a reference to the last element in the container. calling back() on an empty list will terminate() the processing.
Return: const reference to the last element
function push_front🔗
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🔗
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 push_back🔗
bool push_back(
const T & data
)
add element to the end 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_back🔗
bool push_back(
T && data
)
add element to the end 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🔗
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 pop_back🔗
bool pop_back()
remove the last element from the end 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🔗
void clear()
remove all elements from the list, list will be empty element destructors will be invoked
function erase🔗
iterator erase(
const_iterator iter
)
remove next element from linked iterator position element destructors will be invoked recursive calls to erase_after only delete each 2nd element
Parameters:
- iter iterator linking 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🔗
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 >
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>
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_back🔗
template <typename... ConstructorArgs>
T & emplace_back(
ConstructorArgs &&... args
)
construct element inplace at end of list
Parameters:
- args T-typed construction parameters (initializer list)
Return: referene to generated element, return is C++17-conform
function emplace🔗
template <typename... ConstructorArgs>
iterator emplace(
const_iterator iter,
ConstructorArgs &&... args
)
construct element inplace at iterator position
Parameters:
- args T-typed construction parameters (initializer list)
- iter position in list to (construct)insert after
Return: iterator to the newly added element
function insert🔗
iterator insert(
const_iterator citer,
const T & data
)
insert element before 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🔗
iterator insert(
const_iterator citer,
T && data
)
add element before 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 2 April 2022 at 16:37:47 CEST