Lines Matching refs:head
24 * A list consists of a list head plus elements.
26 * The list head's pointers point to the first and the last element.
35 * The list head's next and previous pointers point back to itself.
38 void dm_list_init(struct dm_list *head);
41 * Insert an element before 'head'.
42 * If 'head' is the list head, this adds an element to the end of the list.
44 void dm_list_add(struct dm_list *head, struct dm_list *elem);
47 * Insert an element after 'head'.
48 * If 'head' is the list head, this adds an element to the front of the list.
50 void dm_list_add_h(struct dm_list *head, struct dm_list *elem);
60 * Remove an element from existing list and insert before 'head'.
62 void dm_list_move(struct dm_list *head, struct dm_list *elem);
67 int dm_list_empty(const struct dm_list *head);
72 int dm_list_start(const struct dm_list *head, const struct dm_list *elem);
77 int dm_list_end(const struct dm_list *head, const struct dm_list *elem);
82 struct dm_list *dm_list_first(const struct dm_list *head);
87 struct dm_list *dm_list_last(const struct dm_list *head);
92 struct dm_list *dm_list_prev(const struct dm_list *head, const struct dm_list *elem);
97 struct dm_list *dm_list_next(const struct dm_list *head, const struct dm_list *elem);
100 * Given the address v of an instance of 'struct dm_list' called 'head'
103 #define dm_list_struct_base(v, t, head) \
104 ((t *)((uintptr_t)(v) - (uintptr_t)&((t *) 0)->head))
121 * return the list head 'list'
128 #define dm_list_iterate(v, head) \
129 for (v = (head)->n; v != head; v = v->n)
136 * If 'start' is 'head' it walks the list backwards.
138 #define dm_list_uniterate(v, head, start) \
139 for (v = (start)->p; v != head; v = v->p)
146 #define dm_list_iterate_safe(v, t, head) \
147 for (v = (head)->n, t = v->n; v != head; v = t, t = v->n)
154 #define dm_list_iterate_items_gen(v, head, field) \
155 for (v = dm_list_struct_base((head)->n, typeof(*v), field); \
156 &v->field != (head); \
164 #define dm_list_iterate_items(v, head) dm_list_iterate_items_gen(v, (head), list)
172 #define dm_list_iterate_items_gen_safe(v, t, head, field) \
173 for (v = dm_list_struct_base((head)->n, typeof(*v), field), \
175 &v->field != (head); \
183 #define dm_list_iterate_items_safe(v, t, head) \
184 dm_list_iterate_items_gen_safe(v, t, (head), list)
192 #define dm_list_iterate_back_items_gen(v, head, field) \
193 for (v = dm_list_struct_base((head)->p, typeof(*v), field); \
194 &v->field != (head); \
203 #define dm_list_iterate_back_items(v, head) dm_list_iterate_back_items_gen(v, (head), list)
208 unsigned int dm_list_size(const struct dm_list *head);