#ifndef _LIST_H_ #define _LIST_H_ #define list_add_head(head, obj) \ if((head)==0) { \ (head) = (obj); \ (obj)->prev = (obj)->next = obj; \ } \ else { \ (obj)->next = (head); \ (obj)->prev = (head)->prev; \ (head)->prev = (obj); \ (obj)->prev->next = (obj); \ (head) = (obj); \ } #define list_add_tail(head, obj) \ if((head)==0) { \ (head) = (obj); \ (obj)->prev = (obj)->next = obj; \ } \ else { \ (head)->prev->next = (obj); \ (obj)->prev = (head)->prev; \ (obj)->next = (head); \ (head)->prev = (obj); \ } #define list_remove(head, obj) \ if((obj)->next==(obj)) { \ (obj)->prev = (obj)->next = 0; \ (head) = 0; \ } \ else { \ if((head)==(obj)) \ (head) = (obj)->next; \ (obj)->next->prev = (obj)->prev; \ (obj)->prev->next = (obj)->next; \ (obj)->prev = (obj)->next = 0; \ } #define list_remove_head(head, obj) \ if((head)==0) { \ (obj) = 0; \ } \ else \ if((head)->next == (head)) { \ (obj) = (head); \ (obj)->prev = (obj)->next = 0; \ (head) = 0; \ } \ else { \ (obj) = (head); \ (head)->next->prev = (head)->prev; \ (head)->prev->next = (head)->next; \ (head) = (obj)->next; \ (obj)->prev = (obj)->next = 0; \ } #endif