00001 #ifndef _DSQUEUE_H
00002 #define _DSQUEUE_H
00003
00004 #include "jsoc.h"
00005 #include "list.h"
00006
00007 typedef ListNode_t QueueNode_t;
00008
00009 struct Queue_struct
00010 {
00011 LinkedList_t *list;
00012 ListNode_t *front;
00013 ListNode_t *back;
00014 };
00015 typedef struct Queue_struct Queue_t;
00016
00017 Queue_t *queue_create();
00018
00019 void queue_destroy(Queue_t **queue);
00020
00021 static inline void queue_freenode(QueueNode_t **node)
00022 {
00023 list_llfreenode(node);
00024 }
00025
00026
00027 QueueNode_t *queue_dequeue(Queue_t *queue);
00028
00029
00030 QueueNode_t *queue_queue(Queue_t *queue, void *val);
00031
00032
00033 static inline QueueNode_t *queue_front(Queue_t *queue)
00034 {
00035 return queue->front;
00036 }
00037
00038
00039 static inline QueueNode_t *queue_back(Queue_t *queue)
00040 {
00041 return queue->back;
00042 }
00043
00044 QueueNode_t *queue_find(Queue_t *queue, void *val);
00045
00046 QueueNode_t *queue_remove(Queue_t *queue, void *val);
00047
00048 static inline int queue_empty(Queue_t *queue)
00049 {
00050 return (queue->front == NULL && queue->back == NULL);
00051 }
00052 #endif