📄 ospfh_linklist.h
字号:
#ifndef _ZEBRA_LINKLIST_H
#define _ZEBRA_LINKLIST_H
struct listnode
{
struct listnode *next;
struct listnode *prev;
void *data;
};
struct list
{
struct listnode *head;
struct listnode *tail;
unsigned int count;
int (*cmp) (void *val1, void *val2);
void (*del) (void *val);
};
//typedef struct list *list;
//typedef struct listnode *listnode;
#define nextnode(X) ((X) = (X)->next)
#define listhead(X) ((X)->head)
#define listcount(X) ((X)->count)
#define list_isempty(X) ((X)->head == NULL && (X)->tail == NULL)
#define getdata(X) ((X)->data)
/* List iteration macro. */
#define LIST_LOOP(L,V,N) \
for ((N) = (L)->head; (N); (N) = (N)->next) \
if (((V) = (N)->data) != NULL)
/* List node add macro. */
#define LISTNODE_ADD(L,N) \
do { \
(N)->prev = (L)->tail; \
if ((L)->head == NULL) \
(L)->head = (N); \
else \
(L)->tail->next = (N); \
(L)->tail = (N); \
} while (0)
/* List node delete macro. */
#define LISTNODE_DELETE(L,N) \
do { \
if ((N)->prev) \
(N)->prev->next = (N)->next; \
else \
(L)->head = (N)->next; \
if ((N)->next) \
(N)->next->prev = (N)->prev; \
else \
(L)->tail = (N)->prev; \
} while (0)
struct list * list_new ();
void list_free (struct list *);
static struct listnode * listnode_new ();
void listnode_free (struct listnode *);
void listnode_add (struct list *, void *);
void listnode_add_sort (struct list *, void *);
void listnode_add_after (struct list *, struct listnode *, void *);
void listnode_delete (struct list *, void *);
void * listnode_head (struct list *);
void list_delete_all_node (struct list *);
void list_delete (struct list *);
struct listnode * listnode_lookup (struct list *, void *);
void list_delete_node (struct list* , struct listnode* );
void list_add_node_prev (struct list*, struct listnode* , void *);
void list_add_node_next (struct list* , struct listnode* , void *);
void list_add_list (struct list *, struct list *);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -