24 # include <stdalign.h> 51 #define VLC_LIST_INITIALIZER(h) { h, h } 168 return head->
next == head;
183 return node->
prev == head;
198 return node->
next == head;
221 return it->current != it->head;
232 #define vlc_list_entry_aligned_size(p) \ 233 ((sizeof (*(p)) + sizeof (max_align_t) - 1) / sizeof (max_align_t)) 235 #define vlc_list_entry_dummy(p) \ 236 (0 ? (p) : ((void *)(&(max_align_t[vlc_list_entry_aligned_size(p)]){}))) 238 #define vlc_list_offset_p(p, member) \ 239 ((p) = vlc_list_entry_dummy(p), (char *)(&(p)->member) - (char *)(p)) 241 #define vlc_list_entry_p(node, p, member) \ 242 (0 ? (p) : (void *)(((char *)(node)) - vlc_list_offset_p(p, member))) 259 #define vlc_list_foreach(pos, head, member) \ 260 for (struct vlc_list_it vlc_list_it_##pos = vlc_list_it_start(head); \ 261 vlc_list_it_continue(&(vlc_list_it_##pos)) \ 262 && ((pos) = vlc_list_entry_p((vlc_list_it_##pos).current, \ 263 pos, member), true); \ 264 vlc_list_it_next(&(vlc_list_it_##pos))) 273 #define vlc_list_entry(ptr, type, member) container_of(ptr, type, member) 280 return ((
char *)(head->
next)) - offset;
288 return ((
char *)(head->
prev)) - offset;
297 return ((
char *)(node->
prev)) - offset;
306 return ((
char *)(node->
next)) - offset;
316 #define vlc_list_first_entry_or_null(head, type, member) \ 317 ((type *)vlc_list_first_or_null(head, offsetof (type, member))) 326 #define vlc_list_last_entry_or_null(head, type, member) \ 327 ((type *)vlc_list_last_or_null(head, offsetof (type, member))) 329 #define vlc_list_prev_entry_or_null(head, entry, type, member) \ 330 ((type *)vlc_list_prev_or_null(head, &(entry)->member, \ 331 offsetof (type, member))) 332 #define vlc_list_next_entry_or_null(head, entry, type, member) \ 333 ((type *)vlc_list_next_or_null(head, &(entry)->member, \ 334 offsetof (type, member))) struct vlc_list * prev
Definition: vlc_list.h:45
static void vlc_list_add_between(struct vlc_list *restrict node, struct vlc_list *prev, struct vlc_list *next)
Inserts an element in a list.
Definition: vlc_list.h:70
static void vlc_list_prepend(struct vlc_list *restrict node, struct vlc_list *head)
Prepends an element into a list.
Definition: vlc_list.h:122
static bool vlc_list_is_first(const struct vlc_list *node, const struct vlc_list *head)
Checks if an element is first in a list.
Definition: vlc_list.h:181
static void vlc_list_add_before(struct vlc_list *restrict node, struct vlc_list *next)
Inserts an element before another.
Definition: vlc_list.h:98
static void * vlc_list_next_or_null(const struct vlc_list *head, struct vlc_list *node, size_t offset)
Definition: vlc_list.h:301
List iterator.
Definition: vlc_list.h:205
static struct vlc_list_it vlc_list_it_start(const struct vlc_list *head)
Definition: vlc_list.h:213
static void * vlc_list_last_or_null(const struct vlc_list *head, size_t offset)
Definition: vlc_list.h:284
static void vlc_list_remove(struct vlc_list *restrict node)
Removes an element from a list.
Definition: vlc_list.h:135
static void vlc_list_append(struct vlc_list *restrict node, struct vlc_list *head)
Appends an element into a list.
Definition: vlc_list.h:110
static bool vlc_list_it_continue(const struct vlc_list_it *restrict it)
Definition: vlc_list.h:220
const struct vlc_list * head
Definition: vlc_list.h:207
static bool vlc_list_is_empty(const struct vlc_list *head)
Checks if a list is empty.
Definition: vlc_list.h:167
struct vlc_list * next
Definition: vlc_list.h:46
static void vlc_list_it_next(struct vlc_list_it *restrict it)
Definition: vlc_list.h:225
static void vlc_list_replace(const struct vlc_list *original, struct vlc_list *restrict substitute)
Replaces an element with another one.
Definition: vlc_list.h:150
static void * vlc_list_first_or_null(const struct vlc_list *head, size_t offset)
Definition: vlc_list.h:276
static void vlc_list_add_after(struct vlc_list *restrict node, struct vlc_list *prev)
Inserts an element after another.
Definition: vlc_list.h:86
Doubly-linked list node.
Definition: vlc_list.h:43
static void * vlc_list_prev_or_null(const struct vlc_list *head, struct vlc_list *node, size_t offset)
Definition: vlc_list.h:292
static bool vlc_list_is_last(const struct vlc_list *node, const struct vlc_list *head)
Checks if an element is last in a list.
Definition: vlc_list.h:196
static void vlc_list_init(struct vlc_list *restrict head)
Initializes an empty list head.
Definition: vlc_list.h:57