00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00037 #ifndef _U_DOUBLE_LIST_H_
00038 #define _U_DOUBLE_LIST_H_
00039
00040
00041 #include <stddef.h>
00042
00043
00044 struct list_head
00045 {
00046 struct list_head *prev;
00047 struct list_head *next;
00048 };
00049
00050
00051 #define LIST_INITHEAD(__item) \
00052 do { \
00053 (__item)->prev = (__item); \
00054 (__item)->next = (__item); \
00055 } while (0)
00056
00057 #define LIST_ADD(__item, __list) \
00058 do { \
00059 (__item)->prev = (__list); \
00060 (__item)->next = (__list)->next; \
00061 (__list)->next->prev = (__item); \
00062 (__list)->next = (__item); \
00063 } while (0)
00064
00065 #define LIST_ADDTAIL(__item, __list) \
00066 do { \
00067 (__item)->next = (__list); \
00068 (__item)->prev = (__list)->prev; \
00069 (__list)->prev->next = (__item); \
00070 (__list)->prev = (__item); \
00071 } while(0)
00072
00073 #define LIST_REPLACE(__from, __to) \
00074 do { \
00075 (__to)->prev = (__from)->prev; \
00076 (__to)->next = (__from)->next; \
00077 (__from)->next->prev = (__to); \
00078 (__from)->prev->next = (__to); \
00079 } while (0)
00080
00081 #define LIST_DEL(__item) \
00082 do { \
00083 (__item)->prev->next = (__item)->next; \
00084 (__item)->next->prev = (__item)->prev; \
00085 } while(0)
00086
00087 #define LIST_DELINIT(__item) \
00088 do { \
00089 (__item)->prev->next = (__item)->next; \
00090 (__item)->next->prev = (__item)->prev; \
00091 (__item)->next = (__item); \
00092 (__item)->prev = (__item); \
00093 } while(0)
00094
00095 #define LIST_ENTRY(__type, __item, __field) \
00096 ((__type *)(((char *)(__item)) - offsetof(__type, __field)))
00097
00098
00099 #endif