Template Class list

Nested Relationships

Nested Types

Class Documentation

template<typename T, uint64_t Capacity>
class 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

Public Types

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

Public Functions

list() noexcept

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

~list() noexcept

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

list(const list &rhs) noexcept

copy constructor list including elements

Parameters:

rhs[in] is the list to copy from (same capacity)

list(list &&rhs) noexcept

move constructor list including elements

Parameters:

rhs[in] is the list to move-construct elements from (same capacity)

list &operator=(const list &rhs) noexcept

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[in] is the list to copy from (same capacity)

Returns:

reference to created list

list &operator=(list &&rhs) noexcept

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[in] is the list to move from (‘source’, same capacity)

Returns:

reference to created list

iterator begin() noexcept

default list operation to retrieve an interator to first list element

Returns:

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

const_iterator begin() const noexcept

default list operation to retrieve an const_iterator to first list element

Returns:

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

const_iterator cbegin() const noexcept

default list operation to retrieve an const_iterator to first list element

Returns:

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

iterator end() noexcept

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

Returns:

iterator to end element, does not contain data.

const_iterator end() const noexcept

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->)

Returns:

iterator to end element, does not contain data.

const_iterator cend() const noexcept

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->)

Returns:

iterator to end element, does not contain data.

bool empty() const noexcept

list meta information on filling

Returns:

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

bool full() const noexcept

list meta information on filling

Returns:

whether list is full (filled with ‘capacity’ / ‘max_size’ elements) (true), otherwise (false)

size_type size() const noexcept

list meta information on filling

Returns:

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

size_type capacity() const noexcept

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

Returns:

list has been initialized with the following number of elements.

size_type max_size() const noexcept

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

Returns:

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

T &front() noexcept

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

Returns:

reference to the first element

const T &front() const noexcept

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

Returns:

const reference to the first element

T &back() noexcept

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

Returns:

reference to the last element

const T &back() const noexcept

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

Returns:

const reference to the last element

bool push_front(const T &data) noexcept

add element to the beginning of the list

Parameters:

data[in] reference to data element

Returns:

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

bool push_front(T &&data) noexcept

add element to the beginning of the list via move

Parameters:

data[in] universal reference perfectly forwarded to client class

Returns:

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

bool push_back(const T &data) noexcept

add element to the end of the list

Parameters:

data[in] reference to data element

Returns:

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

bool push_back(T &&data) noexcept

add element to the end of the list via move

Parameters:

data[in] universal reference perfectly forwarded to client class

Returns:

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

bool pop_front() noexcept

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

Returns:

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

bool pop_back() noexcept

remove the last element from the end of the list element destructor will be invoked

Returns:

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

void clear() noexcept

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

iterator erase(const_iterator iter) noexcept

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

Parameters:

iter[in] iterator linking the to-be-removed element

Returns:

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

size_type remove(const T &data) noexcept

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

Parameters:

data[in] value to compare to

Returns:

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

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

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

Parameters:

pred[in] unary predicate which returns true if the element should be removed

Returns:

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

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

construct element inplace at begining of list

Parameters:

args[in] T-typed construction parameters (initializer list)

Returns:

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

template<typename ...ConstructorArgs>
T &emplace_back(ConstructorArgs&&... args) noexcept

construct element inplace at end of list

Parameters:

args[in] T-typed construction parameters (initializer list)

Returns:

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

template<typename ...ConstructorArgs>
iterator emplace(const_iterator iter, ConstructorArgs&&... args) noexcept

construct element inplace at iterator position

Parameters:
  • args[in] T-typed construction parameters (initializer list)

  • iter[in] position in list to (construct)insert after

Returns:

iterator to the newly added element

iterator insert(const_iterator citer, const T &data) noexcept

insert element before iterator position

Parameters:
  • citer[in] iterator with the position to insert after

  • data[in] reference to element to add

Returns:

iterator to the newly added element

iterator insert(const_iterator citer, T &&data) noexcept

add element before the pointed-to element via move

Parameters:
  • citer[in] iterator with the position to insert after

  • data[in] universal reference perfectly forwarded to client class

Returns:

iterator to the newly added element