Go to the documentation of this file.
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;
222 return it->current != it->head;
233 #define vlc_list_entry_aligned_size(p) \
234 ((sizeof (*(p)) + sizeof (max_align_t) - 1) / sizeof (max_align_t))
236 #define vlc_list_entry_dummy(p) \
237 (0 ? (p) : ((void *)(&(max_align_t[vlc_list_entry_aligned_size(p)]){0})))
239 #define vlc_list_offset_p(p, member) \
240 ((p) = vlc_list_entry_dummy(p), (char *)(&(p)->member) - (char *)(p))
242 #define vlc_list_entry_p(node, p, member) \
243 (0 ? (p) : (void *)(((char *)(node)) - vlc_list_offset_p(p, member)))
260 #define vlc_list_foreach(pos, head, member) \
261 for (struct vlc_list_it vlc_list_it__##pos = vlc_list_it_start(head); \
262 vlc_list_it_continue(&(vlc_list_it__##pos)) \
263 && ((pos) = vlc_list_entry_p((vlc_list_it__##pos).current, \
264 pos, member), true); \
265 vlc_list_it_next(&(vlc_list_it__##pos)))
274 #define vlc_list_entry(ptr, type, member) container_of(ptr, type, member)
281 return ((
char *)(head->
next)) - offset;
289 return ((
char *)(head->
prev)) - offset;
298 return ((
char *)(node->
prev)) - offset;
307 return ((
char *)(node->
next)) - offset;
317 #define vlc_list_first_entry_or_null(head, type, member) \
318 ((type *)vlc_list_first_or_null(head, offsetof (type, member)))
327 #define vlc_list_last_entry_or_null(head, type, member) \
328 ((type *)vlc_list_last_or_null(head, offsetof (type, member)))
330 #define vlc_list_prev_entry_or_null(head, entry, type, member) \
331 ((type *)vlc_list_prev_or_null(head, &(entry)->member, \
332 offsetof (type, member)))
333 #define vlc_list_next_entry_or_null(head, entry, type, member) \
334 ((type *)vlc_list_next_or_null(head, &(entry)->member, \
335 offsetof (type, member)))
static void vlc_list_it_next(struct vlc_list_it *restrict it)
Definition: vlc_list.h:226
const struct vlc_list * head
Definition: vlc_list.h:207
static void * vlc_list_prev_or_null(const struct vlc_list *head, struct vlc_list *node, size_t offset)
Definition: vlc_list.h:293
List iterator.
Definition: vlc_list.h:205
static void vlc_list_init(struct vlc_list *restrict head)
Initializes an empty list head.
Definition: vlc_list.h:57
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
struct vlc_list * next
Definition: vlc_list.h:209
struct vlc_list * prev
Definition: vlc_list.h:45
Doubly-linked list node.
Definition: vlc_list.h:43
static void * vlc_list_last_or_null(const struct vlc_list *head, size_t offset)
Definition: vlc_list.h:285
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 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_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_is_empty(const struct vlc_list *head)
Checks if a list is empty.
Definition: vlc_list.h:167
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_add_before(struct vlc_list *restrict node, struct vlc_list *next)
Inserts an element before another.
Definition: vlc_list.h:98
struct vlc_list * next
Definition: vlc_list.h:46
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
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
struct vlc_list * current
Definition: vlc_list.h:208
static bool vlc_list_it_continue(const struct vlc_list_it *restrict it)
Definition: vlc_list.h:221
static struct vlc_list_it vlc_list_it_start(const struct vlc_list *head)
Definition: vlc_list.h:213
static void * vlc_list_next_or_null(const struct vlc_list *head, struct vlc_list *node, size_t offset)
Definition: vlc_list.h:302
static void * vlc_list_first_or_null(const struct vlc_list *head, size_t offset)
Definition: vlc_list.h:277