From d0c552362beeda71c947c6b2bbd623ac091854a7 Mon Sep 17 00:00:00 2001 From: Mineplay Date: Sat, 26 Apr 2025 09:20:11 -0500 Subject: [PATCH] feat(doubly linked list): implemented append function --- Include/Fledasty/Core/DoublyLinkedList.h | 6 ++- Src/Core/DoublyLinkedList.c | 62 ++++++++++++++++-------- Tests/Main.c | 10 ++++ 3 files changed, 55 insertions(+), 23 deletions(-) diff --git a/Include/Fledasty/Core/DoublyLinkedList.h b/Include/Fledasty/Core/DoublyLinkedList.h index 0ed8ab7..b5b55d9 100644 --- a/Include/Fledasty/Core/DoublyLinkedList.h +++ b/Include/Fledasty/Core/DoublyLinkedList.h @@ -39,7 +39,9 @@ typedef struct { FledastyDoublyLinkedListNode *start, *end; } FledastyDoublyLinkedList; -FledastyError fledasty_doubly_linked_list_initialize(FledastyDoublyLinkedList *new_linked_list, void *values, const size_t values_size, const size_t element_byte_size); -FledastyError fledasty_doubly_list_destroy(FledastyDoublyLinkedList *current_linked_list); +FledastyError fledasty_doubly_linked_list_initialize(FledastyDoublyLinkedList *new_doubly_linked_list, void *values, const size_t values_size, const size_t element_byte_size); +FledastyError fledasty_doubly_list_destroy(FledastyDoublyLinkedList *current_doubly_linked_list); + +FledastyError fledasty_doubly_linked_list_append(FledastyDoublyLinkedList *current_doubly_linked_list, void *value); #endif \ No newline at end of file diff --git a/Src/Core/DoublyLinkedList.c b/Src/Core/DoublyLinkedList.c index 7ae719d..50e7bf6 100644 --- a/Src/Core/DoublyLinkedList.c +++ b/Src/Core/DoublyLinkedList.c @@ -27,31 +27,31 @@ #include #include -FledastyError fledasty_doubly_linked_list_initialize(FledastyDoublyLinkedList *new_linked_list, void *values, const size_t values_size, const size_t element_byte_size) { - if (new_linked_list == NULL) { +FledastyError fledasty_doubly_linked_list_initialize(FledastyDoublyLinkedList *new_doubly_linked_list, void *values, const size_t values_size, const size_t element_byte_size) { + if (new_doubly_linked_list == NULL) { return FLEDASTY_ERROR_FAILED_ALLOCATION; } - new_linked_list->element_byte_size = element_byte_size; + new_doubly_linked_list->element_byte_size = element_byte_size; if (values == NULL || values_size == 0) { - new_linked_list->size = 0; - new_linked_list->start = NULL; - new_linked_list->end = NULL; + new_doubly_linked_list->size = 0; + new_doubly_linked_list->start = NULL; + new_doubly_linked_list->end = NULL; } else { - new_linked_list->size = values_size; + new_doubly_linked_list->size = values_size; - new_linked_list->start = (FledastyDoublyLinkedListNode*)hallocy_malloc(sizeof(FledastyDoublyLinkedListNode)); - new_linked_list->start->value = hallocy_malloc(new_linked_list->element_byte_size); - hallocy_copy_memory(new_linked_list->start->value, values, new_linked_list->element_byte_size); + new_doubly_linked_list->start = (FledastyDoublyLinkedListNode*)hallocy_malloc(sizeof(FledastyDoublyLinkedListNode)); + new_doubly_linked_list->start->value = hallocy_malloc(new_doubly_linked_list->element_byte_size); + hallocy_copy_memory(new_doubly_linked_list->start->value, values, new_doubly_linked_list->element_byte_size); - new_linked_list->start->previous = NULL; - new_linked_list->start->next = NULL; + new_doubly_linked_list->start->previous = NULL; + new_doubly_linked_list->start->next = NULL; - FledastyDoublyLinkedListNode *last_node = new_linked_list->start; - for (size_t index = new_linked_list->element_byte_size; index < new_linked_list->size * new_linked_list->element_byte_size; index += new_linked_list->element_byte_size) { + FledastyDoublyLinkedListNode *last_node = new_doubly_linked_list->start; + for (size_t index = new_doubly_linked_list->element_byte_size; index < new_doubly_linked_list->size * new_doubly_linked_list->element_byte_size; index += new_doubly_linked_list->element_byte_size) { FledastyDoublyLinkedListNode *new_node = (FledastyDoublyLinkedListNode*)hallocy_malloc(sizeof(FledastyDoublyLinkedListNode)); - new_node->value = hallocy_malloc(new_linked_list->element_byte_size); - hallocy_copy_memory(new_node->value, (unsigned char*)values + index, new_linked_list->element_byte_size); + new_node->value = hallocy_malloc(new_doubly_linked_list->element_byte_size); + hallocy_copy_memory(new_node->value, (unsigned char*)values + index, new_doubly_linked_list->element_byte_size); new_node->previous = last_node; new_node->next = NULL; @@ -60,18 +60,18 @@ FledastyError fledasty_doubly_linked_list_initialize(FledastyDoublyLinkedList *n last_node = new_node; } - new_linked_list->end = last_node; + new_doubly_linked_list->end = last_node; } return FLEDASTY_ERROR_NONE; } -FledastyError fledasty_doubly_list_destroy(FledastyDoublyLinkedList *current_linked_list) { - if (current_linked_list == NULL) { +FledastyError fledasty_doubly_list_destroy(FledastyDoublyLinkedList *current_doubly_linked_list) { + if (current_doubly_linked_list == NULL) { return FLEDASTY_ERROR_INVALID_POINTER; } - FledastyDoublyLinkedListNode *current_node = current_linked_list->start; + FledastyDoublyLinkedListNode *current_node = current_doubly_linked_list->start; while (current_node->next != NULL) { current_node = current_node->next; @@ -92,4 +92,24 @@ FledastyError fledasty_doubly_list_destroy(FledastyDoublyLinkedList *current_lin } return FLEDASTY_ERROR_NONE; -} \ No newline at end of file +} + +FledastyError fledasty_doubly_linked_list_append(FledastyDoublyLinkedList *current_doubly_linked_list, void *value) { + if (current_doubly_linked_list == NULL || value == NULL) { + return FLEDASTY_ERROR_INVALID_POINTER; + } + + FledastyDoublyLinkedListNode *new_node = (FledastyDoublyLinkedListNode*)hallocy_malloc(sizeof(FledastyDoublyLinkedListNode)); + + new_node->value = hallocy_malloc(current_doubly_linked_list->element_byte_size); + hallocy_copy_memory(new_node->value, value, current_doubly_linked_list->element_byte_size); + + new_node->previous = current_doubly_linked_list->end; + new_node->next = NULL; + + current_doubly_linked_list->end->next = new_node; + current_doubly_linked_list->end = new_node; + current_doubly_linked_list->size += 1; + + return FLEDASTY_ERROR_NONE; +} diff --git a/Tests/Main.c b/Tests/Main.c index b4539c1..dead7ab 100644 --- a/Tests/Main.c +++ b/Tests/Main.c @@ -142,6 +142,16 @@ int main() { FledastyDoublyLinkedList test_doubly_linked_list; fledasty_doubly_linked_list_initialize(&test_doubly_linked_list, (int[]){11, 12, 13, 14, 15}, 5, sizeof(int)); + for (int i = 0; i < 10; i += 1) { + fledasty_doubly_linked_list_append(&test_doubly_linked_list, &i); + } + + FledastyDoublyLinkedListNode *test_doubly_linked_list_node = test_doubly_linked_list.start; + for (int i = 0; i < test_doubly_linked_list.size; i += 1) { + printf("Doubly linked list get: %d\n", *(int*)test_doubly_linked_list_node->value); + test_doubly_linked_list_node = test_doubly_linked_list_node->next; + } + fledasty_doubly_list_destroy(&test_doubly_linked_list); printf("Done\n"); return 0;