1 /* 2 * This file is not copyrighted. 3 */ 4 5 #ifndef _WSBM_UTIL_H_ 6 #define _WSBM_UTIL_H_ 7 8 #include <stddef.h> 9 10 #ifndef containerOf 11 #define containerOf(__item, __type, __field) \ 12 ((__type *)(((char *) (__item)) - offsetof(__type, __field))) 13 #endif 14 15 struct _WsbmListHead 16 { 17 struct _WsbmListHead *prev; 18 struct _WsbmListHead *next; 19 }; 20 21 #define WSBMINITLISTHEAD(__item) \ 22 do{ \ 23 (__item)->prev = (__item); \ 24 (__item)->next = (__item); \ 25 } while (0) 26 27 #define WSBMLISTADD(__item, __list) \ 28 do { \ 29 (__item)->prev = (__list); \ 30 (__item)->next = (__list)->next; \ 31 (__list)->next->prev = (__item); \ 32 (__list)->next = (__item); \ 33 } while (0) 34 35 #define WSBMLISTADDTAIL(__item, __list) \ 36 do { \ 37 (__item)->next = (__list); \ 38 (__item)->prev = (__list)->prev; \ 39 (__list)->prev->next = (__item); \ 40 (__list)->prev = (__item); \ 41 } while(0) 42 43 #define WSBMLISTDEL(__item) \ 44 do { \ 45 (__item)->prev->next = (__item)->next; \ 46 (__item)->next->prev = (__item)->prev; \ 47 } while(0) 48 49 #define WSBMLISTDELINIT(__item) \ 50 do { \ 51 (__item)->prev->next = (__item)->next; \ 52 (__item)->next->prev = (__item)->prev; \ 53 (__item)->next = (__item); \ 54 (__item)->prev = (__item); \ 55 } while(0) 56 57 #define WSBMLISTFOREACH(__item, __list) \ 58 for((__item) = (__list)->next; (__item) != (__list); (__item) = (__item)->next) 59 60 #define WSBMLISTFOREACHPREV(__item, __list) \ 61 for((__item) = (__list)->prev; (__item) != (__list); (__item) = (__item)->prev) 62 63 #define WSBMLISTFOREACHSAFE(__item, __next, __list) \ 64 for((__item) = (__list)->next, (__next) = (__item)->next; \ 65 (__item) != (__list); \ 66 (__item) = (__next), (__next) = (__item)->next) 67 68 #define WSBMLISTFOREACHPREVSAFE(__item, __prev, __list) \ 69 for((__item) = (__list)->prev, (__prev) = (__item->prev); \ 70 (__item) != (__list); \ 71 (__item) = (__prev), (__prev) = (__item)->prev) 72 73 #define WSBMLISTENTRY(__item, __type, __field) \ 74 containerOf(__item, __type, __field) 75 76 #endif 77