00001
00009 #include <stdlib.h>
00010 #include "queue.h"
00011
00012
00013 Queue newQueue()
00014 {
00015 Queue queue=(Queue)malloc(sizeof(SQueue));
00016
00017 if(!queue) return NULL;
00018 else
00019 {
00020 queue->size=0;
00021 queue->head=NULL;
00022 queue->last=NULL;
00023 return queue;
00024 }
00025 }
00026
00027
00028
00029 void queueDelete(Queue queue)
00030 {
00031 QueueNode aux1,aux2;
00032
00033 if(!queue->size)
00034 free(queue);
00035 else
00036 {
00037 for(aux1=queue->head;aux1;)
00038 {
00039 aux2=aux1;
00040 aux1=aux1->next;
00041 free(aux2);
00042 }
00043 free(queue);
00044 }
00045 }
00046
00047
00048
00049 int queueInsert(Queue queue,void *inf)
00050 {
00051 QueueNode new;
00052 new=(QueueNode)malloc(sizeof(SQueueNode));
00053
00054 if(new)
00055 {
00056 new->inf=inf;
00057 new->next=NULL;
00058
00059 if(!queue->size) queue->head=new;
00060 else queue->last->next=new;
00061
00062 queue->last=new;
00063 queue->size++;
00064 return 0;
00065 }
00066 else return 1;
00067 }
00068
00069
00070
00071 int queueRemove(Queue queue,void **inf)
00072 {
00073 QueueNode aux;
00074
00075 if(!queue->size)
00076 {
00077 if(inf) *inf=NULL;
00078 return 1;
00079 }
00080 else
00081 {
00082 if(inf) *inf=queue->head->inf;
00083
00084 if(queue->size==1)
00085 {
00086 queue->last=NULL;
00087 free(queue->head);
00088 queue->head=NULL;
00089 }
00090 else
00091 {
00092 aux=queue->head;
00093 queue->head=queue->head->next;
00094 free(aux);
00095 }
00096
00097 queue->size--;
00098 return 0;
00099 }
00100 }
00101
00102
00103
00104 int queueConsult(Queue queue,void **inf)
00105 {
00106 if(!queue->size)
00107 {
00108 *inf=NULL;
00109 return 1;
00110 }
00111 else
00112 {
00113 *inf=queue->head->inf;
00114 return 0;
00115 }
00116 }
00117
00118
00119
00120 int queueSize(Queue queue)
00121 {
00122 return(queue->size);
00123 }
00124
00125
00126
00127 int queueMap(Queue queue,void(*fun)(void*))
00128 {
00129 QueueNode aux;
00130
00131 if(queue->size==0) return 1;
00132 else
00133 {
00134 for(aux=queue->head;aux;aux=aux->next)
00135 fun(aux->inf);
00136
00137 return 0;
00138 }
00139 }
00140
00141
00142
00143 Iterator queueIterator(Queue queue)
00144 {
00145 int ctrl;
00146 QueueNode aux;
00147 Iterator it;
00148
00149 it=newIt(queue->size);
00150 for(aux=queue->head,ctrl=0;aux&&!ctrl;aux=aux->next)
00151 ctrl=itAdd(it,aux->inf);
00152
00153 if(ctrl)
00154 {
00155 itDelete(it);
00156 return NULL;
00157 }
00158 else return it;
00159 }