utils-lists 4.0.0
µOS++ C++ intrusive lists utilities
Loading...
Searching...
No Matches
micro_os_plus::utils::double_list_links_base Class Reference

A base class for a double linked list. More...

#include <micro-os-plus/utils/lists.h>

+ Inheritance diagram for micro_os_plus::utils::double_list_links_base:

Public Member Functions

constexpr double_list_links_base ()
 Construct an uninitialised list node.
 
constexpr ~double_list_links_base ()
 Destruct the node.
 
constexpr void initialize (void)
 Initialise the node links.
 
void initialize_once (void)
 Initialize the list only at first run.
 
void link_next (double_list_links_base *node)
 Link the new node as next.
 
void link_previous (double_list_links_base *node)
 Link the new node as previous.
 
bool linked (void) const
 Check if the node is linked to a double list.
 
constexpr double_list_links_basenext (void) const
 Get the link to the next node.
 
constexpr double_list_links_baseprevious (void) const
 Get the link to the previous node.
 
bool uninitialized (void) const
 Check if the node is uninitialised.
 
void unlink (void)
 Remove this node from the list.
 

Protected Attributes

double_list_links_basenext_
 Pointer to the next node.
 
double_list_links_baseprevious_
 Pointer to the previous node.
 

Detailed Description

A base class for a double linked list.

A pair of uninitialised pointers to the next and previous list elements, plus a set of simple (some inlined) methods to access the pointers.

Note
Both the regular and the statically allocated list elements are derived from this class.

Definition at line 92 of file lists.h.

Constructor & Destructor Documentation

◆ double_list_links_base()

constexpr micro_os_plus::utils::double_list_links_base::double_list_links_base ( )
constexpr

Construct an uninitialised list node.

This must be an empty constructor, that does not touch the pointers, but leaves them unchanged.

For statically initialised lists, this means a pair of nullptr pointers.

For regular lists, the constructor of the derived class will handle the initialisations.

Warning
Code analysis may trigger:
  • Member 'previous_' was not initialized in constructor
  • Member 'next_' was not initialized in constructor

Definition at line 53 of file inlines.h.

◆ ~double_list_links_base()

constexpr micro_os_plus::utils::double_list_links_base::~double_list_links_base ( )
constexpr

Destruct the node.

This must be an empty destructor, that does not touch the pointers, but leaves them unchanged.

Definition at line 63 of file inlines.h.

Member Function Documentation

◆ initialize()

constexpr void micro_os_plus::utils::double_list_links_base::initialize ( void )
constexpr

Initialise the node links.

Parameters
None.
Returns
Nothing.

Set both pointers to point to this node.

This is the definition of an unlinked node.

Note
After unlinking the node from a list, it must be returned to this state.

Definition at line 79 of file inlines.h.

◆ initialize_once()

void micro_os_plus::utils::double_list_links_base::initialize_once ( void )

Initialize the list only at first run.

Parameters
None.
Returns
Nothing.

If the statically allocated list is still in the initial uninitialised state (with both pointers nullptr), initialise the list to the empty state, with both pointers pointing to itself.

For non-statically initialised lists, this method is ineffective, since the node is always initialised at construct time.

Note
This method must be manually called for statically allocated list before inserting elements, or performing any other operations.

Definition at line 73 of file lists.cpp.

◆ link_next()

void micro_os_plus::utils::double_list_links_base::link_next ( double_list_links_base * node)

Link the new node as next.

Parameters
None.
Returns
Nothing.

Insert the new node between the next pointer and the node pointed by it.

Used by lists to link new nodes to the list head.

Definition at line 89 of file lists.cpp.

◆ link_previous()

void micro_os_plus::utils::double_list_links_base::link_previous ( double_list_links_base * node)

Link the new node as previous.

Parameters
None.
Returns
Nothing.

Insert the new node between the previous pointer and the node pointed by it.

Used by lists to link new nodes to the list tail.

Definition at line 113 of file lists.cpp.

◆ linked()

bool micro_os_plus::utils::double_list_links_base::linked ( void ) const

Check if the node is linked to a double list.

Return values
trueThe node is linked with both pointers.
falseThe node is not linked.

To be linked, both pointers must point to different nodes than itself (double list requirement).

Definition at line 161 of file lists.cpp.

◆ next()

constexpr double_list_links_base * micro_os_plus::utils::double_list_links_base::next ( void ) const
constexpr

Get the link to the next node.

Return values
Pointerto the next node.

Definition at line 92 of file inlines.h.

◆ previous()

constexpr double_list_links_base * micro_os_plus::utils::double_list_links_base::previous ( void ) const
constexpr

Get the link to the previous node.

Return values
Pointerto the previous node.

Definition at line 98 of file inlines.h.

◆ uninitialized()

bool micro_os_plus::utils::double_list_links_base::uninitialized ( void ) const

Check if the node is uninitialised.

Parameters
None.
Return values
trueThe links are not initialised.
falseThe links are initialised.

An uninitialized node is a node with the pointers set to nullptr.

Only statically allocated nodes in the initial state are uninitialized. Regular nodes are always initialised.

Definition at line 46 of file lists.cpp.

◆ unlink()

void micro_os_plus::utils::double_list_links_base::unlink ( void )

Remove this node from the list.

Returns
Nothing.

Update both neighbours to point to each other, practically removing the node from the list.

The node is returned to the initial state (empty), with both pointers pointing to itself.

Definition at line 138 of file lists.cpp.

Member Data Documentation

◆ next_

double_list_links_base* micro_os_plus::utils::double_list_links_base::next_
protected

Pointer to the next node.

Definition at line 212 of file lists.h.

◆ previous_

double_list_links_base* micro_os_plus::utils::double_list_links_base::previous_
protected

Pointer to the previous node.

Definition at line 207 of file lists.h.


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