Replace Queue List internal usage by a Vector (lighter)
[cgds.git] / src / Queue.c
CommitLineData
a7868768
BA
1/**
2 * @file Queue.c
3 */
4
5#include "cgds/Queue.h"
6
7void _queue_init(Queue* queue, size_t dataSize)
8{
a7868768 9 queue->dataSize = dataSize;
012c97dd 10 _vector_init(queue->array, dataSize);
a7868768
BA
11}
12
13Queue* _queue_new(size_t dataSize)
14{
15 Queue* queue = (Queue*) safe_malloc(sizeof (Queue));
16 _queue_init(queue, dataSize);
17 return queue;
18}
19
20Queue* queue_copy(Queue* queue)
21{
012c97dd
BA
22 Queue* queueCopy = (Queue*) safe_malloc(sizeof (Queue));
23 queueCopy->dataSize = queue->dataSize;
24 Vector* arrayCopy = vector_copy(queue->array);
25 queueCopy->array = arrayCopy;
a7868768
BA
26 return queueCopy;
27}
28
29Bool queue_empty(Queue* queue)
30{
012c97dd 31 return vector_empty(queue->array);
a7868768
BA
32}
33
34UInt queue_size(Queue* queue)
35{
012c97dd 36 return vector_size(queue->array);
a7868768
BA
37}
38
39void _queue_push(Queue* queue, void* data)
40{
012c97dd 41 _vector_push(queue->array, data);
a7868768
BA
42}
43
44void* _queue_peek(Queue* queue)
45{
012c97dd 46 return vector_get(queue->array, 0);
a7868768
BA
47}
48
49void queue_pop(Queue* queue)
50{
012c97dd
BA
51 //remove first vector element and shift its internal array
52 safe_free(queue->array->datas[0]);
53 queue->array->datas++;
54 //NOTE: we remove first element, so capacity decrease too
55 queue->array->size--;
56 queue->array->capacity--;
a7868768
BA
57}
58
59void queue_clear(Queue* queue)
60{
012c97dd 61 vector_clear(queue->array);
a7868768
BA
62}
63
64void queue_destroy(Queue* queue)
65{
66 queue_clear(queue);
67 safe_free(queue);
68}