Introduce list_types.h
[libside.git] / src / list.h
CommitLineData
b59abc69
MD
1// SPDX-License-Identifier: MIT
2/*
3 * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
4 */
5
67337c4a
MD
6#ifndef _SIDE_LIST_H
7#define _SIDE_LIST_H
b59abc69 8
e1672a0c 9#include "list_types.h"
b59abc69
MD
10
11static inline
67337c4a 12void side_list_insert_node_tail(struct side_list_head *head, struct side_list_node *node)
b59abc69
MD
13{
14 node->next = &head->node;
15 node->prev = head->node.prev;
16 node->prev->next = node;
17 head->node.prev = node;
18}
19
20static inline
67337c4a 21void side_list_insert_node_head(struct side_list_head *head, struct side_list_node *node)
b59abc69
MD
22{
23 node->next = head->node.next;
24 node->prev = &head->node;
25 node->next->prev = node;
26 head->node.next = node;
27}
28
29static inline
67337c4a 30void side_list_remove_node(struct side_list_node *node)
b59abc69
MD
31{
32 node->next->prev = node->prev;
33 node->prev->next = node->next;
34}
35
67337c4a
MD
36#define side_list_for_each_entry(_entry, _head, _member) \
37 for ((_entry) = side_container_of((_head)->node.next, __typeof__(*(_entry)), _member); \
a13c9d2e 38 &(_entry)->_member != &(_head)->node; \
67337c4a 39 (_entry) = side_container_of((_entry)->_member.next, __typeof__(*(_entry)), _member))
b59abc69
MD
40
41/* List iteration, safe against node reclaim while iterating. */
67337c4a
MD
42#define side_list_for_each_entry_safe(_entry, _next_entry, _head, _member) \
43 for ((_entry) = side_container_of((_head)->node.next, __typeof__(*(_entry)), _member), \
44 (_next_entry) = side_container_of((_entry)->_member.next, __typeof__(*(_entry)), _member); \
6e46f5e6 45 &(_entry)->_member != &(_head)->node; \
67337c4a
MD
46 (_entry) = side_container_of((_next_entry)->_member.next, __typeof__(*(_entry)), _member), \
47 (_next_entry) = side_container_of((_entry)->_member.next, __typeof__(*(_entry)), _member))
b59abc69 48
67337c4a 49#endif /* _SIDE_LIST_H */
This page took 0.025695 seconds and 4 git commands to generate.