| /* Taken from depthcharge: src/base/list.h */ |
| /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| |
| #ifndef __LIST_H__ |
| #define __LIST_H__ |
| |
| struct list_node { |
| struct list_node *next; |
| struct list_node *prev; |
| }; |
| |
| // Remove list_node node from the doubly linked list it's a part of. |
| void list_remove(struct list_node *node); |
| // Insert list_node node after list_node after in a doubly linked list. |
| void list_insert_after(struct list_node *node, struct list_node *after); |
| // Insert list_node node before list_node before in a doubly linked list. |
| void list_insert_before(struct list_node *node, struct list_node *before); |
| // Appends the node to the end of the list. |
| void list_append(struct list_node *node, struct list_node *head); |
| |
| #define list_for_each(ptr, head, member) \ |
| for ((ptr) = container_of((head).next, typeof(*(ptr)), member); \ |
| (uintptr_t)ptr + (uintptr_t)offsetof(typeof(*(ptr)), member); \ |
| (ptr) = container_of((ptr)->member.next, \ |
| typeof(*(ptr)), member)) |
| |
| #endif /* __LIST_H__ */ |