1 // SPDX-License-Identifier: MIT
3 * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
9 #include "list_types.h"
12 void side_list_insert_node_tail(struct side_list_head
*head
, struct side_list_node
*node
)
14 node
->next
= &head
->node
;
15 node
->prev
= head
->node
.prev
;
16 node
->prev
->next
= node
;
17 head
->node
.prev
= node
;
21 void side_list_insert_node_head(struct side_list_head
*head
, struct side_list_node
*node
)
23 node
->next
= head
->node
.next
;
24 node
->prev
= &head
->node
;
25 node
->next
->prev
= node
;
26 head
->node
.next
= node
;
30 void side_list_remove_node(struct side_list_node
*node
)
32 node
->next
->prev
= node
->prev
;
33 node
->prev
->next
= node
->next
;
36 #define side_list_for_each_entry(_entry, _head, _member) \
37 for ((_entry) = side_container_of((_head)->node.next, __typeof__(*(_entry)), _member); \
38 &(_entry)->_member != &(_head)->node; \
39 (_entry) = side_container_of((_entry)->_member.next, __typeof__(*(_entry)), _member))
41 /* List iteration, safe against node reclaim while iterating. */
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); \
45 &(_entry)->_member != &(_head)->node; \
46 (_entry) = side_container_of((_next_entry)->_member.next, __typeof__(*(_entry)), _member), \
47 (_next_entry) = side_container_of((_entry)->_member.next, __typeof__(*(_entry)), _member))
49 #endif /* _SIDE_LIST_H */
This page took 0.031185 seconds and 4 git commands to generate.