stream-deploy/ZLM/3rdpart/media-server/libhls/source/list.h

62 lines
1.3 KiB
C++

#ifndef _list_h_
#define _list_h_
struct list_head
{
struct list_head *next, *prev;
};
static inline void list_insert_after(struct list_head *item, struct list_head *head)
{
struct list_head *prev, *next;
prev = head;
next = head->next;
item->prev = prev;
item->next = next;
next->prev = item;
prev->next = item;
}
static inline void list_insert_before(struct list_head *item, struct list_head *head)
{
struct list_head *prev, *next;
prev = head->prev;
next = head;
item->prev = prev;
item->next = next;
next->prev = item;
prev->next = item;
}
static inline void list_remove(struct list_head *item)
{
struct list_head *prev, *next;
prev = item->prev;
next = item->next;
prev->next = next;
next->prev = prev;
item->prev = item->next = 0;
}
static inline int list_empty(const struct list_head *head)
{
return head->next == head;
}
#define LIST_INIT_HEAD(list) do { (list)->next = (list)->prev = (list); } while (0)
#define list_entry(ptr, type, member) \
((type*)((char*)ptr-(ptrdiff_t)(&((type*)0)->member)))
#define list_for_each(pos, head) \
for(pos = (head)->next; pos != (head); pos = pos->next)
#define list_for_each_safe(pos, n, head) \
for(pos = (head)->next, n = pos->next; pos != (head); pos = n, n=pos->next)
#endif /* !_list_h_ */