|
Packit |
6ef888 |
#ifndef __OSI_LIST_DOT_H__
|
|
Packit |
6ef888 |
#define __OSI_LIST_DOT_H__
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
struct osi_list
|
|
Packit |
6ef888 |
{
|
|
Packit |
6ef888 |
struct osi_list *next, *prev;
|
|
Packit |
6ef888 |
};
|
|
Packit |
6ef888 |
typedef struct osi_list osi_list_t;
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#define osi_list_decl(var) osi_list_t var = { &var, &var }
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#define osi_list_empty(var) ((var)->next == (var))
|
|
Packit |
6ef888 |
#define osi_list_entry(var, type, mem) ((type *)((unsigned long)(var) - (unsigned long)(&((type *)NULL)->mem)))
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#define osi_list_init(head) \
|
|
Packit |
6ef888 |
do \
|
|
Packit |
6ef888 |
{ \
|
|
Packit |
6ef888 |
osi_list_t *osi_list_var = (head); \
|
|
Packit |
6ef888 |
osi_list_var->next = osi_list_var->prev = osi_list_var; \
|
|
Packit |
6ef888 |
} \
|
|
Packit |
6ef888 |
while (0)
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#define osi_list_add(new, head) \
|
|
Packit |
6ef888 |
do \
|
|
Packit |
6ef888 |
{ \
|
|
Packit |
6ef888 |
osi_list_t *osi_list_var_new = (new); \
|
|
Packit |
6ef888 |
osi_list_t *osi_list_var_head = (head); \
|
|
Packit |
6ef888 |
osi_list_var_new->next = osi_list_var_head->next; \
|
|
Packit |
6ef888 |
osi_list_var_new->prev = osi_list_var_head; \
|
|
Packit |
6ef888 |
osi_list_var_head->next->prev = osi_list_var_new; \
|
|
Packit |
6ef888 |
osi_list_var_head->next = osi_list_var_new; \
|
|
Packit |
6ef888 |
} \
|
|
Packit |
6ef888 |
while (0)
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#define osi_list_add_next osi_list_add
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#define osi_list_add_prev(new, head) \
|
|
Packit |
6ef888 |
do \
|
|
Packit |
6ef888 |
{ \
|
|
Packit |
6ef888 |
osi_list_t *osi_list_var_new = (new); \
|
|
Packit |
6ef888 |
osi_list_t *osi_list_var_head = (head); \
|
|
Packit |
6ef888 |
osi_list_var_new->prev = osi_list_var_head->prev; \
|
|
Packit |
6ef888 |
osi_list_var_new->next = osi_list_var_head; \
|
|
Packit |
6ef888 |
osi_list_var_head->prev->next = osi_list_var_new; \
|
|
Packit |
6ef888 |
osi_list_var_head->prev = osi_list_var_new; \
|
|
Packit |
6ef888 |
} \
|
|
Packit |
6ef888 |
while (0)
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#define osi_list_del(var) \
|
|
Packit |
6ef888 |
do \
|
|
Packit |
6ef888 |
{ \
|
|
Packit |
6ef888 |
osi_list_t *osi_list_var = (var); \
|
|
Packit |
6ef888 |
osi_list_var->next->prev = osi_list_var->prev; \
|
|
Packit |
6ef888 |
osi_list_var->prev->next = osi_list_var->next; \
|
|
Packit |
6ef888 |
} \
|
|
Packit |
6ef888 |
while (0)
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#define osi_list_del_init(var) \
|
|
Packit |
6ef888 |
do \
|
|
Packit |
6ef888 |
{ \
|
|
Packit |
6ef888 |
osi_list_t *osi_list_var = (var); \
|
|
Packit |
6ef888 |
osi_list_var->next->prev = osi_list_var->prev; \
|
|
Packit |
6ef888 |
osi_list_var->prev->next = osi_list_var->next; \
|
|
Packit |
6ef888 |
osi_list_var->next = osi_list_var->prev = osi_list_var; \
|
|
Packit |
6ef888 |
} \
|
|
Packit |
6ef888 |
while (0)
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#define osi_list_foreach(tmp, head) \
|
|
Packit |
6ef888 |
for ((tmp) = (head)->next; (tmp) != (head); (tmp) = (tmp)->next)
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#define osi_list_foreach_safe(tmp, head, x) \
|
|
Packit |
6ef888 |
for ((tmp) = (head)->next, (x) = (tmp)->next; \
|
|
Packit |
6ef888 |
(tmp) != (head); \
|
|
Packit |
6ef888 |
(tmp) = (x), (x) = (x)->next)
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
|
|
Packit |
6ef888 |
#endif /* __OSI_LIST_DOT_H__ */
|