1 // SPDX-License-Identifier: MIT
3 * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
9 #include "list_types.h"
12 void side_list_head_init(struct side_list_head
*head
)
14 head
->node
.next
= head
->node
.prev
= &head
->node
;
18 void side_list_insert_node_tail(struct side_list_head
*head
, struct side_list_node
*node
)
20 node
->next
= &head
->node
;
21 node
->prev
= head
->node
.prev
;
22 node
->prev
->next
= node
;
23 head
->node
.prev
= node
;
27 void side_list_insert_node_head(struct side_list_head
*head
, struct side_list_node
*node
)
29 node
->next
= head
->node
.next
;
30 node
->prev
= &head
->node
;
31 node
->next
->prev
= node
;
32 head
->node
.next
= node
;
36 void side_list_remove_node(struct side_list_node
*node
)
38 node
->next
->prev
= node
->prev
;
39 node
->prev
->next
= node
->next
;
43 bool side_list_empty(struct side_list_head
*head
)
45 return &head
->node
== head
->node
.next
;
49 * Splice "from" list at the beginning of "to" list.
52 void side_list_splice(struct side_list_head
*from
, struct side_list_head
*to
)
54 if (side_list_empty(from
))
56 from
->node
.next
->prev
= &to
->node
;
57 from
->node
.prev
->next
= to
->node
.next
;
58 to
->node
.next
->prev
= from
->node
.prev
;
59 to
->node
.next
= from
->node
.next
;
62 #define side_list_for_each_entry(_entry, _head, _member) \
63 for ((_entry) = side_container_of((_head)->node.next, __typeof__(*(_entry)), _member); \
64 &(_entry)->_member != &(_head)->node; \
65 (_entry) = side_container_of((_entry)->_member.next, __typeof__(*(_entry)), _member))
67 /* List iteration, safe against node reclaim while iterating. */
68 #define side_list_for_each_entry_safe(_entry, _next_entry, _head, _member) \
69 for ((_entry) = side_container_of((_head)->node.next, __typeof__(*(_entry)), _member), \
70 (_next_entry) = side_container_of((_entry)->_member.next, __typeof__(*(_entry)), _member); \
71 &(_entry)->_member != &(_head)->node; \
72 (_entry) = (_next_entry), \
73 (_next_entry) = side_container_of((_entry)->_member.next, __typeof__(*(_entry)), _member))
75 #endif /* _SIDE_LIST_H */
This page took 0.042657 seconds and 4 git commands to generate.