queue.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:3k
- /*
- * include/asm-s390/queue.h
- *
- * S390 version
- * Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
- * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com)
- *
- * A little set of queue utilies.
- */
- #ifndef __ASM_QUEUE_H
- #define __ASM_QUEUE_H
- #include <linux/stddef.h>
- typedef struct queue
- {
- struct queue *next;
- } queue;
- typedef queue list;
- typedef struct
- {
- queue *head;
- queue *tail;
- } qheader;
- static __inline__ void init_queue(qheader *qhead)
- {
- memset(qhead,0,sizeof(*qhead));
- }
- static __inline__ void enqueue_tail(qheader *qhead,queue *member)
- {
- if(member)
- {
- queue *tail=qhead->tail;
- if(tail)
- tail->next=member;
- else
-
- qhead->head=member;
- qhead->tail=member;
- member->next=NULL;
- }
- }
- static __inline__ queue *dequeue_head(qheader *qhead)
- {
- queue *head=qhead->head,*next_head;
- if(head)
- {
- next_head=head->next;
- qhead->head=next_head;
- if(!next_head)
- qhead->tail=NULL;
- }
- return(head);
- }
- static __inline__ void init_list(list **lhead)
- {
- *lhead=NULL;
- }
- static __inline__ void add_to_list(list **lhead,list *member)
- {
- member->next=*lhead;
- *lhead=member;
- }
- static __inline__ list *remove_listhead(list **lhead)
- {
- list *oldhead=*lhead;
- if(oldhead)
- *lhead=(*lhead)->next;
- return(oldhead);
- }
- static __inline__ void add_to_list_tail(list **lhead,list *member)
- {
- list *curr,*prev;
- if(*lhead==NULL)
- *lhead=member;
- else
- {
- prev=*lhead;
- for(curr=(*lhead)->next;curr!=NULL;curr=curr->next)
- prev=curr;
- prev->next=member;
- }
- }
- static __inline__ void add_to_list_tail_null(list **lhead,list *member)
- {
- member->next=NULL;
- add_to_list_tail_null(lhead,member);
- }
- static __inline__ int is_in_list(list *lhead,list *member)
- {
- list *curr;
- for(curr=lhead;curr!=NULL;curr=curr->next)
- if(curr==member)
- return(1);
- return(0);
- }
- static __inline__ int get_prev(list *lhead,list *member,list **prev)
- {
- list *curr;
- *prev=NULL;
- for(curr=lhead;curr!=NULL;curr=curr->next)
- {
- if(curr==member)
- return(1);
- *prev=curr;
- }
- *prev=NULL;
- return(0);
- }
- static __inline__ int remove_from_list(list **lhead,list *member)
- {
- list *prev;
- if(get_prev(*lhead,member,&prev))
- {
- if(prev)
- prev->next=member->next;
- else
- *lhead=member->next;
- return(1);
- }
- return(0);
- }
- static __inline__ int remove_from_queue(qheader *qhead,queue *member)
- {
- queue *prev;
- if(get_prev(qhead->head,(list *)member,(list **)&prev))
- {
- if(prev)
- {
- prev->next=member->next;
- if(prev->next==NULL)
- qhead->tail=prev;
- }
- else
- {
- if(qhead->head==qhead->tail)
- qhead->tail=NULL;
- qhead->head=member->next;
- }
- return(1);
- }
- return(0);
- }
- #endif /* __ASM_QUEUE_H */