/* queue.c Pedro Flynn - pflynn@microsoftsucks.org */ #include "queue.h" Queue* queue_create() { Queue* new_queue; new_queue = (Queue*) malloc(sizeof(Queue)); new_queue->q_size = 0; new_queue->q_first = new_queue->q_last = NULL; return new_queue; } int queue_enqueue(Queue* queue,void* data) { QueueElmt* new_element; new_element = (QueueElmt*) malloc(sizeof(QueueElmt)); new_element->qe_data = data; if(!queue->q_first) queue->q_first = new_element; else queue->q_last->qe_next = new_element; queue->q_last = new_element; new_element->qe_next = NULL; queue->q_size++; return 0; } int queue_dequeue(Queue* queue,void** data) { QueueElmt* element; if(!queue->q_size) return -1; element = queue->q_first; *data = element->qe_data; if(queue->q_first->qe_next) queue->q_first = queue->q_first->qe_next; else queue->q_last = queue->q_first = NULL; free(element); queue->q_size--; return 0; } int queue_empty(Queue* queue) { void* data; if(!queue->q_size) return -1; while(!queue_dequeue(queue,&data)) free(data); return 0; } int queue_destroy(Queue* queue) { queue_empty(queue); free(queue); return 0; } void queue_print(Queue* queue) { QueueElmt* element; if(!queue->q_size) return; element = queue->q_first; do fprintf(stdout,"%f\n",*((float*) element->qe_data)); while(element = element->qe_next); }