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