00001 #include "dsqueue.h"
00002
00003 Queue_t *queue_create(unsigned int dsize)
00004 {
00005 Queue_t *queue = malloc(sizeof(Queue_t));
00006 if (queue)
00007 {
00008 LinkedList_t *list = list_llcreate(dsize, NULL);
00009 if (list)
00010 {
00011 queue->list = list;
00012 queue->front = NULL;
00013 queue->back = NULL;
00014 }
00015 else
00016 {
00017 free(queue);
00018 queue = NULL;
00019 }
00020 }
00021
00022 return queue;
00023 }
00024
00025 void queue_destroy(Queue_t **queue)
00026 {
00027 if (queue && *queue)
00028 {
00029 list_llfree(&((*queue)->list));
00030 (*queue)->front = NULL;
00031 (*queue)->back = NULL;
00032 free(*queue);
00033 *queue = NULL;
00034 }
00035 }
00036
00037
00038 QueueNode_t *queue_dequeue(Queue_t *queue)
00039 {
00040 QueueNode_t *node = NULL;
00041
00042 if (queue && queue->front)
00043 {
00044 node = queue->front;
00045 list_llremove(queue->list, node);
00046 queue->front = queue->list->first;
00047 if (!queue->front)
00048 {
00049
00050 queue->back = NULL;
00051 }
00052 }
00053
00054 return node;
00055 }
00056
00057
00058 QueueNode_t *queue_queue(Queue_t *queue, void *val)
00059 {
00060 QueueNode_t *node = NULL;
00061
00062 if (queue && queue->list)
00063 {
00064 node = (QueueNode_t *)list_llinserttail(queue->list, val);
00065 queue->back = node;
00066
00067 if (!queue->front)
00068 {
00069
00070 queue->front = node;
00071 }
00072 }
00073
00074 return node;
00075 }
00076
00077 QueueNode_t *queue_find(Queue_t *queue, void *val)
00078 {
00079 QueueNode_t *node = NULL;
00080
00081 if (queue && val)
00082 {
00083 node = list_llfind(queue->list, val);
00084 }
00085
00086 return node;
00087 }
00088
00089
00090 QueueNode_t *queue_remove(Queue_t *queue, void *val)
00091 {
00092 QueueNode_t *node = list_llfind(queue->list, val);
00093
00094 if (node)
00095 {
00096 list_llremove(queue->list, node);
00097 queue->front = queue->list->first;
00098 if (node == queue->back)
00099 {
00100
00101 queue->back = list_llgettail(queue->list);
00102 }
00103 }
00104
00105 return node;
00106 }