Linked List interface for use in drivers.
============================================================================
This module provides simple doubly-link list implementation. There are two main structures:
The following shows how to create a linked list with three elements.
The APIs List_get, List_put, and List_putHead are atomic. The other APIs are not necessarily atomic. In other words, when traversing a linked list, it is up to the application to provide thread-safety (e.g. HwiP_disable/restore or MutexP_pend/post).
Initializing and adding an element to the tail and removing it
The List_put and List_get APIs are used to maintain a first-in first-out (FIFO) linked list.
The List_putHead and List_get APIs are used to maintain a last-in first-out (LIFO) linked list.
Traversing a list from head to tail. Note: thread-safety calls are not shown here.
Traversing a list from tail to head. Note: thread-safety calls are not shown here.
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
Go to the source code of this file.
Data Structures | |
struct | List_Elem |
struct | List_List |
Typedefs | |
typedef struct List_Elem | List_Elem |
typedef struct List_List | List_List |
Functions | |
void | List_clearList (List_List *list) |
Function to initialize the contents of a List_List. More... | |
static bool | List_empty (List_List *list) |
Function to test whether a linked list is empty. More... | |
List_Elem * | List_get (List_List *list) |
Function to atomically get the first elem in a linked list. More... | |
static List_Elem * | List_head (List_List *list) |
Function to return the head of a linked list. More... | |
void | List_insert (List_List *list, List_Elem *newElem, List_Elem *curElem) |
Function to insert an elem into a linked list. More... | |
static List_Elem * | List_next (List_Elem *elem) |
Function to return the next elem in a linked list. More... | |
static List_Elem * | List_prev (List_Elem *elem) |
Function to return the prev elem in a linked list. More... | |
void | List_put (List_List *list, List_Elem *elem) |
Function to atomically put an elem onto the end of a linked list. More... | |
void | List_putHead (List_List *list, List_Elem *elem) |
Function to atomically put an elem onto the head of a linked list. More... | |
void | List_remove (List_List *list, List_Elem *elem) |
Function to remove an elem from a linked list. More... | |
static List_Elem * | List_tail (List_List *list) |
Function to return the tail of a linked list. More... | |
void List_clearList | ( | List_List * | list | ) |
|
inlinestatic |
Function to test whether a linked list is empty.
list | A pointer to a linked list |
References List_List::head, and List_get().
Function to atomically get the first elem in a linked list.
list | A pointer to a linked list |
Referenced by List_empty().
Function to return the head of a linked list.
This function does not remove the head, it simply returns a pointer to it. This function is typically used when traversing a linked list.
list | A pointer to the linked list |
References List_List::head, and List_insert().
Function to insert an elem into a linked list.
list | A pointer to the linked list |
newElem | New elem to insert |
curElem | Elem to insert the newElem in front of. This value cannot be NULL. |
Referenced by List_head().
Function to return the next elem in a linked list.
This function does not remove the elem, it simply returns a pointer to next one. This function is typically used when traversing a linked list.
elem | Elem in the list |
References List_Elem::next.
Function to return the prev elem in a linked list.
This function does not remove the elem, it simply returns a pointer to prev one. This function is typically used when traversing a linked list.
elem | Elem in the list |
References List_put(), List_putHead(), List_remove(), and List_Elem::prev.
Function to atomically put an elem onto the end of a linked list.
list | A pointer to the linked list |
elem | Element to place onto the end of the linked list |
Referenced by List_prev().
Function to atomically put an elem onto the head of a linked list.
list | A pointer to the linked list |
elem | Element to place onto the beginning of the linked list |
Referenced by List_prev().
Function to remove an elem from a linked list.
list | A pointer to the linked list |
elem | Element to be removed from a linked list |
Referenced by List_prev().
Function to return the tail of a linked list.
This function does not remove the tail, it simply returns a pointer to it. This function is typically used when traversing a linked list.
list | A pointer to the linked list |
References List_List::tail.