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

Go to the source code of this file.

Data Structures

struct  ARC_StackNode
 
struct  ARC_Stack
 

Typedefs

typedef struct ARC_StackNode ARC_StackNode
 

Functions

void ARC_Stack_Create (ARC_Stack **stack)
 creates ARC_Stack type
 
void ARC_Stack_Destroy (ARC_Stack *stack)
 destroyes ARC_Stack type
 
void ARC_Stack_Push (ARC_Stack *stack, void *data)
 pushes value on stack
 
void * ARC_Stack_Pop (ARC_Stack *stack)
 pops top off of ARC_Stack
 
uint32_t ARC_Stack_Size (ARC_Stack *stack)
 gets size of stack
 

Typedef Documentation

◆ ARC_StackNode

typedef struct ARC_StackNode ARC_StackNode

Definition at line 6 of file stack.c.

Function Documentation

◆ ARC_Stack_Create()

void ARC_Stack_Create ( ARC_Stack ** stack)

creates ARC_Stack type

Parameters
stackARC_Stack to initialize

Definition at line 18 of file stack.c.

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

References ARC_Stack::currentSize.

◆ ARC_Stack_Destroy()

void ARC_Stack_Destroy ( ARC_Stack * stack)

destroyes ARC_Stack type

Definition at line 24 of file stack.c.

24 {
25 if(stack->currentSize != 0 || stack->node != NULL){
27 ARC_DEBUG_LOG_ERROR("ARC_Stack_Destroy(stack) called, but stack was not empty");
28 return;
29 }
30
31 free(stack);
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_StackNode * node
Definition stack.c:15

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

◆ ARC_Stack_Pop()

void * ARC_Stack_Pop ( ARC_Stack * stack)

pops top off of ARC_Stack

Parameters
stackARC_Stack to remove from
Returns
the poped data from the stack as a void *

Definition at line 51 of file stack.c.

51 {
52 if(stack->currentSize == 0){
54 ARC_DEBUG_LOG_ERROR("ARC_Stack_Pop(stack) called, but stack was not empty");
55 return NULL;
56 }
57
58 ARC_StackNode *node = stack->node;
59 if(node == NULL){
61 ARC_DEBUG_LOG_ERROR("ARC_Stack_Pop(stack) called, but node was NULL");
62 return NULL;
63 }
64
65 stack->node = node->next;
66 void *nodeData = node->data;
67 free(node);
68
69 stack->currentSize--;
70
71 return nodeData;
72}
#define ARC_ERRNO_NULL
Definition errno.h:6
ARC_StackNode * next
Definition stack.c:9
void * data
Definition stack.c:10

References ARC_DEBUG_LOG_ERROR, arc_errno, ARC_ERRNO_DATA, ARC_ERRNO_NULL, ARC_Stack::currentSize, ARC_StackNode::data, ARC_StackNode::next, and ARC_Stack::node.

◆ ARC_Stack_Push()

void ARC_Stack_Push ( ARC_Stack * stack,
void * data )

pushes value on stack

Parameters
stackARC_Stack to push to
datadata that is being pushed

Definition at line 34 of file stack.c.

34 {
35 if(stack->currentSize == ~(uint32_t)0){
37 ARC_DEBUG_LOG_ERROR("ARC_Stack_Push(stack) called, size of stack is maxed, cannot add another node");
38 return;
39 }
40
41 ARC_StackNode *node = (ARC_StackNode *)malloc(sizeof(ARC_StackNode));
42 node->data = data;
43 node->next = NULL;
44
45 node->next = stack->node;
46 stack->node = node;
47
48 stack->currentSize++;
49}
#define ARC_ERRNO_OVERFLOW
Definition errno.h:10

References ARC_DEBUG_LOG_ERROR, arc_errno, ARC_ERRNO_OVERFLOW, ARC_Stack::currentSize, ARC_StackNode::data, ARC_StackNode::next, and ARC_Stack::node.

◆ ARC_Stack_Size()

uint32_t ARC_Stack_Size ( ARC_Stack * stack)

gets size of stack

Parameters
stackARC_Stack to get size from
Returns
the stacks size

Definition at line 74 of file stack.c.

74 {
75 return stack->currentSize;
76}

References ARC_Stack::currentSize.