/ ************************************************** ******** Something Simplified from Linux Source Code. This Workis Done by DGOD. Use this List functions, You Should Support C99 OR . To Use this, IF Your Compiler Don't Support, Rewrite the new parameter n, else you shull, n, else you shull, n, else you shull, n, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ************************************************* /
#ifndef _list_h_ # define _list_h_
Typedef struct node {struct node * prev, * next;} node, * pnode
#define offsetof ((int) & ((type *) 0) -> MEMBER) #define list_entry (PTR, TYPE, MEMBER) (/ (Type *) / ((char *) (PTR) ) -offsetof (Type, Member)) /)
Static inline void list_init (pnode n) {n-> prev = n-> next = n;}
Static inline void __list_add (pnode n, pnode prev, pnode next) {next-> prev = n; prev-> next = n; n-> next = next; n-> prev = prev;}
Static inline void list_add (pnode n, pnode head) {__LIST_ADD (n, head, head-> next);}
Static inline void list_add_tail (pnode n, pnode head) {__list_add (n, head-> prev, head);}
Static inline void __list_del (pnode prev, pnode next) {prev-> next = next; Next-> prev = prev;}
Static inline void list_del (pnode n) {__list_del (n-> prev, n-> next); list_init (n);}
Static inline void list_move (pnode n, pnode head) {__list_del (n-> prev, n-> next); list_add (n, head);}
Static inline void list_move_tail (pnode n, pnode head) {__list_del (n-> prev, n-> next); list_add_tail (n, head);}
Static inline int list_empty (pnode head) {return head == head-> next;
Static inline void __list_splice (pnode list, pnode head) {node * first = list-> next; node * last = list-> prev; node * at = head-> next; first-> prev = head; head-> next = first;
Last-> next = at; at-> prev = last;}
Static Inline void list_splice (pnode list, pnode head) {i (! list_empty (list)) {__list_splice (list, head); list_init (list);}}
#define foreach / for (node * n = pOS = (head) -> next; n = n-> next, pos! = (head); POS = n)
#ENDIF / / _ LIST_H_