62 lines
1.3 KiB
C++
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_ */
|