Archeus 0.0.0
A C library and game engine that focuses on documentation
Loading...
Searching...
No Matches
queue.c
Go to the documentation of this file.
1#include "arc/std/queue.h"
2
3#include "arc/std/errno.h"
4#include <stdlib.h>
5
7
12
17
19 *queue = (ARC_Queue *)malloc(sizeof(ARC_Queue));
20 (*queue)->currentSize = 0;
21 (*queue)->node = NULL;
22}
23
25 if(queue->currentSize != 0 || queue->node != NULL){
27 ARC_DEBUG_LOG_ERROR("ARC_Queue_Destroy(queue) called, but queue was not empty");
28 return;
29 }
30
31 free(queue);
32}
33
34void ARC_Queue_Push(ARC_Queue *queue, void *data){
35 if(queue->currentSize == ~(uint32_t)0){
37 ARC_DEBUG_LOG_ERROR("ARC_Queue_Push(queue) called, size of queue is maxed, cannot add another node");
38 return;
39 }
40
41 if(queue->currentSize == 0){
42 ARC_QueueNode *node = (ARC_QueueNode *)malloc(sizeof(ARC_QueueNode));
43 node->data = data;
44 node->next = NULL;
45
46 queue->node = node;
47 queue->currentSize++;
48
49 return;
50 }
51
52 ARC_QueueNode *end = queue->node;
53 for(uint32_t i = 1; i < queue->currentSize; i++){
54 if(end->next == NULL){
56 ARC_DEBUG_LOG_ERROR("ARC_Queue_Push(queue), when getting end node encountered a NULL node");
57 return;
58 }
59
60 end = end->next;
61 }
62
63 ARC_QueueNode *node = (ARC_QueueNode *)malloc(sizeof(ARC_QueueNode));
64 node->data = data;
65 node->next = NULL;
66
67 end->next = node;
68
69 queue->currentSize++;
70}
71
73 if(queue->currentSize == 0){
75 ARC_DEBUG_LOG_ERROR("ARC_Queue_Pop(queue) called, but queue was empty");
76 return NULL;
77 }
78
79 ARC_QueueNode *node = queue->node;
80 if(node == NULL){
82 ARC_DEBUG_LOG_ERROR("ARC_Queue_Pop(queue) called, but node was NULL");
83 return NULL;
84 }
85
86 queue->node = node->next;
87 void *nodeData = node->data;
88 free(node);
89
90 queue->currentSize--;
91
92 return nodeData;
93}
94
95uint32_t ARC_Queue_Size(ARC_Queue *queue){
96 return queue->currentSize;
97}
int32_t arc_errno
Definition errno.c:5
#define ARC_ERRNO_OVERFLOW
Definition errno.h:10
#define ARC_ERRNO_NULL
Definition errno.h:6
#define ARC_DEBUG_LOG_ERROR(STR)
Definition errno.h:39
#define ARC_ERRNO_DATA
Definition errno.h:7
void ARC_Queue_Push(ARC_Queue *queue, void *data)
pushes value to end of queue
Definition queue.c:34
void ARC_Queue_Destroy(ARC_Queue *queue)
destroyes ARC_Queue type
Definition queue.c:24
void * ARC_Queue_Pop(ARC_Queue *queue)
pops the front off of the ARC_Queue
Definition queue.c:72
uint32_t ARC_Queue_Size(ARC_Queue *queue)
gets size of queue
Definition queue.c:95
void ARC_Queue_Create(ARC_Queue **queue)
creates ARC_Queue type
Definition queue.c:18
ARC_QueueNode * next
Definition queue.c:9
void * data
Definition queue.c:10
uint32_t currentSize
Definition queue.c:14
ARC_QueueNode * node
Definition queue.c:15