Commit | Line | Data |
---|---|---|
a7868768 BA |
1 | /** |
2 | * @file Queue.c | |
3 | */ | |
4 | ||
5 | #include "cgds/Queue.h" | |
6 | ||
7 | void _queue_init(Queue* queue, size_t dataSize) | |
8 | { | |
a7868768 | 9 | queue->dataSize = dataSize; |
012c97dd | 10 | _vector_init(queue->array, dataSize); |
a7868768 BA |
11 | } |
12 | ||
13 | Queue* _queue_new(size_t dataSize) | |
14 | { | |
15 | Queue* queue = (Queue*) safe_malloc(sizeof (Queue)); | |
16 | _queue_init(queue, dataSize); | |
17 | return queue; | |
18 | } | |
19 | ||
20 | Queue* 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 | ||
29 | Bool queue_empty(Queue* queue) | |
30 | { | |
012c97dd | 31 | return vector_empty(queue->array); |
a7868768 BA |
32 | } |
33 | ||
34 | UInt queue_size(Queue* queue) | |
35 | { | |
012c97dd | 36 | return vector_size(queue->array); |
a7868768 BA |
37 | } |
38 | ||
39 | void _queue_push(Queue* queue, void* data) | |
40 | { | |
012c97dd | 41 | _vector_push(queue->array, data); |
a7868768 BA |
42 | } |
43 | ||
44 | void* _queue_peek(Queue* queue) | |
45 | { | |
bbd242d4 | 46 | return _vector_get(queue->array, 0); |
a7868768 BA |
47 | } |
48 | ||
49 | void 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 | ||
59 | void queue_clear(Queue* queue) | |
60 | { | |
012c97dd | 61 | vector_clear(queue->array); |
a7868768 BA |
62 | } |
63 | ||
64 | void queue_destroy(Queue* queue) | |
65 | { | |
66 | queue_clear(queue); | |
67 | safe_free(queue); | |
68 | } |