X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=src%2FQueue.c;h=3e61381fe0a7c6046ad2350469aac812abb43417;hb=195fd722d1d22a3a6163de16dd827770b3d9d39e;hp=5b24a3db976a02d45570cabde2043e45e0a76307;hpb=a78687686f5b490d99fae21f9fa8aaa9a34f1812;p=cgds.git diff --git a/src/Queue.c b/src/Queue.c index 5b24a3d..3e61381 100644 --- a/src/Queue.c +++ b/src/Queue.c @@ -6,80 +6,59 @@ void _queue_init(Queue* queue, size_t dataSize) { - queue->size = 0; queue->dataSize = dataSize; - queue->front = NULL; - queue->back = NULL; + _list_init(queue->list, dataSize); } Queue* _queue_new(size_t dataSize) { Queue* queue = (Queue*) safe_malloc(sizeof (Queue)); + queue->list = _list_new(dataSize); _queue_init(queue, dataSize); return queue; } Queue* queue_copy(Queue* queue) { - Queue* queueCopy = _queue_new(queue->dataSize); - QueueCell* queueCell = queue->front; - while (queueCell != NULL) - { - _queue_push(queueCopy, queueCell->data); - queueCell = queueCell->next; - } + Queue* queueCopy = (Queue*) safe_malloc(sizeof (Queue)); + queueCopy->dataSize = queue->dataSize; + List* listCopy = list_copy(queue->list); + queueCopy->list = listCopy; return queueCopy; } Bool queue_empty(Queue* queue) { - return (queue->size == 0); + return list_empty(queue->list); } UInt queue_size(Queue* queue) { - return queue->size; + return list_size(queue->list); } void _queue_push(Queue* queue, void* data) { - QueueCell* newQueueBack = (QueueCell*) safe_malloc(sizeof (QueueCell)); - newQueueBack->data = safe_malloc(queue->dataSize); - memcpy(newQueueBack->data, data, queue->dataSize); - newQueueBack->next = NULL; - if (queue->size > 0) - queue->back->next = newQueueBack; - queue->back = newQueueBack; - if (queue->size == 0) - queue->front = newQueueBack; - queue->size++; + _list_insert_back(queue->list, data); } void* _queue_peek(Queue* queue) { - return queue->front->data; + return _list_get(queue->list->head); } void queue_pop(Queue* queue) { - QueueCell* toTrash = queue->front; - queue->front = queue->front->next; - if (queue->front == NULL) - queue->back = NULL; - safe_free(toTrash->data); - safe_free(toTrash); - queue->size--; + list_remove_front(queue->list); } void queue_clear(Queue* queue) { - while (queue->size > 0) - queue_pop(queue); - _queue_init(queue, queue->dataSize); + list_clear(queue->list); } void queue_destroy(Queue* queue) { - queue_clear(queue); + list_destroy(queue->list); safe_free(queue); }