From 0e430f3dd52e57d19ac6defa823d0a2f4dd86270 Mon Sep 17 00:00:00 2001 From: Mineplay Date: Wed, 23 Apr 2025 05:33:10 -0500 Subject: [PATCH] feat(stack): added push function to stack --- Include/Fledasty/Core/Stack.h | 2 ++ Src/Core/Stack.c | 20 ++++++++++++++++++++ Tests/Main.c | 4 ++++ 3 files changed, 26 insertions(+) diff --git a/Include/Fledasty/Core/Stack.h b/Include/Fledasty/Core/Stack.h index c3977a6..d117836 100644 --- a/Include/Fledasty/Core/Stack.h +++ b/Include/Fledasty/Core/Stack.h @@ -37,6 +37,8 @@ typedef struct { FledastyError fledasty_stack_initialize(FledastyStack *new_stack, const size_t element_byte_size); FledastyError fledasty_stack_destroy(FledastyStack *current_stack); +FledastyError fledasty_stack_push(FledastyStack *current_stack, void *value); + static inline size_t fledasty_stack_is_empty(const FledastyStack *current_stack) { return current_stack->size == 0; } #endif \ No newline at end of file diff --git a/Src/Core/Stack.c b/Src/Core/Stack.c index 1938d7a..6c6090c 100644 --- a/Src/Core/Stack.c +++ b/Src/Core/Stack.c @@ -54,5 +54,25 @@ FledastyError fledasty_stack_destroy(FledastyStack *current_stack) { } current_stack->buffer = NULL; + return FLEDASTY_ERROR_NONE; +} + +FledastyError fledasty_stack_push(FledastyStack *current_stack, void *value) { + if (current_stack == NULL || value == NULL) { + return FLEDASTY_ERROR_INVALID_POINTER; + } + + if (current_stack->size == current_stack->capacity) { + current_stack->capacity = current_stack->capacity + (current_stack->capacity / 2); + current_stack->buffer = (unsigned char*)hallocy_realloc(current_stack->buffer, current_stack->capacity); + + if (current_stack->buffer == NULL) { + return FLEDASTY_ERROR_FAILED_ALLOCATION; + } + } + + hallocy_copy_memory(current_stack->buffer + (current_stack->size * current_stack->element_byte_size), value, current_stack->element_byte_size); + current_stack->size += 1; + return FLEDASTY_ERROR_NONE; } \ No newline at end of file diff --git a/Tests/Main.c b/Tests/Main.c index 7a53313..b31e9fa 100644 --- a/Tests/Main.c +++ b/Tests/Main.c @@ -48,6 +48,10 @@ int main() { FledastyStack test_stack; fledasty_stack_initialize(&test_stack, sizeof(int)); + for (int i = 0; i < 10; i += 1) { + fledasty_stack_push(&test_stack, &i); + } + if (fledasty_stack_is_empty(&test_stack)) { printf("Stack is empty\n"); }