27#define SPA_LIST_INIT(list) ((struct spa_list){ (list), (list) }) 
 
   39#define spa_list_is_empty(l)  ((l)->next == (l)) 
   65#define spa_list_first(head, type, member)                              \ 
   66        SPA_CONTAINER_OF((head)->next, type, member) 
   68#define spa_list_last(head, type, member)                               \ 
   69        SPA_CONTAINER_OF((head)->prev, type, member) 
 
   71#define spa_list_append(list, item)                                     \ 
   72        spa_list_insert((list)->prev, item) 
 
   74#define spa_list_prepend(list, item)                                    \ 
   75        spa_list_insert(list, item) 
 
   77#define spa_list_is_end(pos, head, member)                              \ 
   78        (&(pos)->member == (head)) 
 
   80#define spa_list_next(pos, member)                                      \ 
   81        SPA_CONTAINER_OF((pos)->member.next, __typeof__(*(pos)), member) 
 
   83#define spa_list_prev(pos, member)                                      \ 
   84        SPA_CONTAINER_OF((pos)->member.prev, __typeof__(*(pos)), member) 
 
   86#define spa_list_consume(pos, head, member)                             \ 
   87        for ((pos) = spa_list_first(head, __typeof__(*(pos)), member);  \ 
 
   88             !spa_list_is_empty(head);                                  \ 
   89             (pos) = spa_list_first(head, __typeof__(*(pos)), member)) 
 
   91#define spa_list_for_each_next(pos, head, curr, member)                 \ 
   92        for ((pos) = spa_list_first(curr, __typeof__(*(pos)), member);  \ 
   93             !spa_list_is_end(pos, head, member);                       \ 
   94             (pos) = spa_list_next(pos, member)) 
 
   96#define spa_list_for_each_prev(pos, head, curr, member)                 \ 
   97        for ((pos) = spa_list_last(curr, __typeof__(*(pos)), member);   \ 
   98             !spa_list_is_end(pos, head, member);                       \ 
   99             (pos) = spa_list_prev(pos, member)) 
 
  101#define spa_list_for_each(pos, head, member)                            \ 
  102        spa_list_for_each_next(pos, head, head, member) 
  104#define spa_list_for_each_reverse(pos, head, member)                    \ 
  105        spa_list_for_each_prev(pos, head, head, member) 
 
  107#define spa_list_for_each_safe_next(pos, tmp, head, curr, member)       \ 
  108        for ((pos) = spa_list_first(curr, __typeof__(*(pos)), member);  \ 
 
  109             (tmp) = spa_list_next(pos, member),                                \ 
  110             !spa_list_is_end(pos, head, member);                       \ 
 
  113#define spa_list_for_each_safe_prev(pos, tmp, head, curr, member)       \ 
  114        for ((pos) = spa_list_last(curr, __typeof__(*(pos)), member);   \ 
  115             (tmp) = spa_list_prev(pos, member),                                \ 
  116             !spa_list_is_end(pos, head, member);                       \ 
 
  119#define spa_list_for_each_safe(pos, tmp, head, member)                  \ 
  120        spa_list_for_each_safe_next(pos, tmp, head, head, member) 
  122#define spa_list_for_each_safe_reverse(pos, tmp, head, member)          \ 
  123        spa_list_for_each_safe_prev(pos, tmp, head, head, member) 
 
  125#define spa_list_cursor_start(cursor, head, member)                     \ 
  126        spa_list_prepend(head, &(cursor).member) 
 
  128#define spa_list_for_each_cursor(pos, cursor, head, member)             \ 
  129        for((pos) = spa_list_first(&(cursor).member, __typeof__(*(pos)), member); \ 
 
  130            spa_list_remove(&(pos)->member),                            \ 
  131            spa_list_append(&(cursor).member, &(pos)->member),          \ 
  132            !spa_list_is_end(pos, head, member);                        \ 
 
  133            (pos) = spa_list_next(&(cursor), member)) 
  135#define spa_list_cursor_end(cursor, member)                             \ 
  136        spa_list_remove(&(cursor).member) 
 
static void spa_list_insert(struct spa_list *list, struct spa_list *elem)
Definition list.h:47
static int spa_list_is_initialized(struct spa_list *list)
Definition list.h:40
static void spa_list_init(struct spa_list *list)
Definition list.h:35
static void spa_list_remove(struct spa_list *elem)
Definition list.h:65
#define spa_list_is_empty(l)
Definition list.h:45
#define SPA_LIST_INIT(list)
Definition list.h:33
static void spa_list_insert_list(struct spa_list *list, struct spa_list *other)
Definition list.h:55
struct spa_list * prev
Definition list.h:29
struct spa_list * next
Definition list.h:28