Archeus 0.0.0
A C library and game engine that focuses on documentation
Loading...
Searching...
No Matches
queue.c File Reference
#include "arc/std/queue.h"
#include "arc/std/errno.h"
#include <stdlib.h>

Go to the source code of this file.

Data Structures

struct  ARC_QueueNode
 
struct  ARC_Queue
 

Typedefs

typedef struct ARC_QueueNode ARC_QueueNode
 

Functions

void ARC_Queue_Create (ARC_Queue **queue)
 creates ARC_Queue type
 
void ARC_Queue_Destroy (ARC_Queue *queue)
 destroyes ARC_Queue type
 
void ARC_Queue_Push (ARC_Queue *queue, void *data)
 pushes value to end of queue
 
void * ARC_Queue_Pop (ARC_Queue *queue)
 pops the front off of the ARC_Queue
 
uint32_t ARC_Queue_Size (ARC_Queue *queue)
 gets size of queue
 

Typedef Documentation

◆ ARC_QueueNode

typedef struct ARC_QueueNode ARC_QueueNode

Definition at line 6 of file queue.c.

Function Documentation

◆ ARC_Queue_Create()

void ARC_Queue_Create ( ARC_Queue ** queue)

creates ARC_Queue type

Parameters
queueARC_Queue to initialize

Definition at line 18 of file queue.c.

18 {
19 *queue = (ARC_Queue *)malloc(sizeof(ARC_Queue));
20 (*queue)->currentSize = 0;
21 (*queue)->node = NULL;
22}
uint32_t currentSize
Definition queue.c:14

References ARC_Queue::currentSize.

◆ ARC_Queue_Destroy()

void ARC_Queue_Destroy ( ARC_Queue * queue)

destroyes ARC_Queue type

Definition at line 24 of file queue.c.

24 {
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}
int32_t arc_errno
Definition errno.c:5
#define ARC_DEBUG_LOG_ERROR(STR)
Definition errno.h:39
#define ARC_ERRNO_DATA
Definition errno.h:7
ARC_QueueNode * node
Definition queue.c:15

References ARC_DEBUG_LOG_ERROR, arc_errno, ARC_ERRNO_DATA, ARC_Queue::currentSize, and ARC_Queue::node.

◆ ARC_Queue_Pop()

void * ARC_Queue_Pop ( ARC_Queue * queue)

pops the front off of the ARC_Queue

Parameters
queueARC_Queue to remove from
Returns
the poped data from the queue as a void *

Definition at line 72 of file queue.c.

72 {
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}
#define ARC_ERRNO_NULL
Definition errno.h:6
ARC_QueueNode * next
Definition queue.c:9
void * data
Definition queue.c:10

References ARC_DEBUG_LOG_ERROR, arc_errno, ARC_ERRNO_DATA, ARC_ERRNO_NULL, ARC_Queue::currentSize, ARC_QueueNode::data, ARC_QueueNode::next, and ARC_Queue::node.

◆ ARC_Queue_Push()

void ARC_Queue_Push ( ARC_Queue * queue,
void * data )

pushes value to end of queue

Parameters
queueARC_Queue to push to
datadata that is being pushed

Definition at line 34 of file queue.c.

34 {
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}
#define ARC_ERRNO_OVERFLOW
Definition errno.h:10

References ARC_DEBUG_LOG_ERROR, arc_errno, ARC_ERRNO_NULL, ARC_ERRNO_OVERFLOW, ARC_Queue::currentSize, ARC_QueueNode::data, ARC_QueueNode::next, and ARC_Queue::node.

◆ ARC_Queue_Size()

uint32_t ARC_Queue_Size ( ARC_Queue * queue)

gets size of queue

Parameters
vectorARC_Queue to get size from
Returns
the queues size

Definition at line 95 of file queue.c.

95 {
96 return queue->currentSize;
97}

References ARC_Queue::currentSize.