00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <string.h>
00025 #include <stdio.h>
00026 #include <stdlib.h>
00027 #include "queue.h"
00028 #include "types.h"
00029
00030
00031
00032
00033
00034
00035 queue_t* create_queue()
00036 {
00037 queue_t *q = (queue_t *)malloc(sizeof(queue_t));
00038 q->head = NULL;
00039 q->tail = NULL;
00040 q->count = 0;
00041
00042 return q;
00043 }
00044
00045
00046
00047
00048 void enqueue_item(queue_t *q, void *item)
00049 {
00050 queue_node_t *node;
00051
00052
00053
00054
00055
00056
00057
00058
00059 oassert(item != NULL);
00060 oassert(q != NULL);
00061 node = (queue_node_t *)malloc(sizeof(queue_node_t));
00062 node->next = NULL;
00063 node->item = item;
00064
00065 q->count++;
00066
00067
00068 if (q->tail == NULL)
00069 q->tail = node;
00070 else
00071 q->tail->next = node;
00072 q->tail = node;
00073
00074 if (q->head == NULL)
00075 q->head = node;
00076 }
00077
00078
00079
00080
00081 void* dequeue_item(queue_t *q)
00082 {
00083 void *item;
00084 queue_node_t *node;
00085
00086 oassert(q != NULL);
00087 oassert(q->head != NULL);
00088
00089 q->count--;
00090
00091 node = q->head;
00092 item = node->item;
00093 q->head = q->head->next;
00094 if (q->head == NULL)
00095 q->tail = NULL;
00096
00097 free(node);
00098
00099 return item;
00100 }
00101
00102
00103
00104
00105
00106
00107 void destroy_queue(queue_t *q)
00108 {
00109 while (!is_empty(q))
00110 dequeue_item(q);
00111 free(q);
00112 }
00113
00114
00115
00116
00117 int is_empty (queue_t *q)
00118 {
00119 return q->head == NULL;
00120 }