From df76edc97a9f5f1dfc896818098c6aad8c98b699 Mon Sep 17 00:00:00 2001 From: epochryphon Date: Wed, 27 May 2026 22:04:56 -0500 Subject: [PATCH] implemention for create/initialize vectors --- .../.marigold_vector.c.kate-swp | Bin 460 -> 0 bytes .../internal/internal_marigold_vector.c | 62 ++++++++++++++++++ .../internal/internal_marigold_vector.h | 8 ++- .../MODULE_marigold_vector/marigold_vector.c | 22 ++++++- 4 files changed, 89 insertions(+), 3 deletions(-) delete mode 100644 source_code/MODULE_marigold_vector/.marigold_vector.c.kate-swp diff --git a/source_code/MODULE_marigold_vector/.marigold_vector.c.kate-swp b/source_code/MODULE_marigold_vector/.marigold_vector.c.kate-swp deleted file mode 100644 index 9ab88555d157fa1adcf87957ac58af5ba3e702f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460 zcmY*VO-sW-6kI%|H<8{7`i^bUR=gA}dJrl|jyZS?n`EPlX*MM52Z$KI&i(=q{s}Ms z2!D^zgKtdM+JPZ3Z)fJc2q89nX%z+6vY=y~DcT$D3L&~*#roRTX5D?AF5bRBdmryI zSOh0Lxn}|%wV3_M9?Sc&$tz2dF&XJ9wCAOgNm$8L(E(kl*qSn2)%%S)n4Yp7=|`xk znLy9g=#=`a#sLg9-oWs{1bk<>rSXv1)vQ3jE2vyXnM$@PGx3Ga&nQxcGA0OnLK36nLhfb(+Msvv T;F$^h`^}g`_Aq~80?YXi#%gNa diff --git a/source_code/MODULE_marigold_vector/internal/internal_marigold_vector.c b/source_code/MODULE_marigold_vector/internal/internal_marigold_vector.c index e69de29..c3c8b77 100644 --- a/source_code/MODULE_marigold_vector/internal/internal_marigold_vector.c +++ b/source_code/MODULE_marigold_vector/internal/internal_marigold_vector.c @@ -0,0 +1,62 @@ +#include "internal_marigold_vector.h" + +vector_struct* +vector_initialize(vector_struct* new_vector, + size_t item_size, + size_t starting_capacity, + vector_growth_rate_enum growth_rate, + int (*comparator)(const void*, const void*), + void (*item_free)(const void *), + bool is_multithread_safe) +{ + new_vector->item_size = item_size; + new_vector->current_capacity = starting_capacity; + new_vector->current_occupancy = 0; + new_vector->comparator = comparator; + new_vector->item_free = item_free; + new_vector->growth_strategy = (uint8_t)growth_rate; + new_vector->owner_count = 1; + + if (is_multithread_safe) + { + new_vector->flags |= vector_multithread_safe; + } + +#ifdef MARIGOLD_DEBUG + new_vector->debug_flags = 0; + new_vector->debug_resize_count = 0; + new_vector->debug_function_call_count = 0; + new_vector->debug_last_error_code = 0; + new_vector->debug_allocation_failures = 0; +#endif + + if (starting_capacity > 0) + { + new_vector->data_pointer = calloc(starting_capacity, item_size); + if (!new_vector->data_pointer) + { + return NULL; + } + } + else + { + new_vector->data_pointer = NULL; + } + + if (is_multithread_safe) + { + new_vector->mutex_lock = calloc(1, sizeof(pthread_mutex_t)); + if (!new_vector->mutex_lock) + { + free(new_vector->data_pointer); + return NULL; + } + pthread_mutex_init(new_vector->mutex_lock, NULL); + } + else + { + new_vector->mutex_lock = NULL; + } + + return new_vector; +} diff --git a/source_code/MODULE_marigold_vector/internal/internal_marigold_vector.h b/source_code/MODULE_marigold_vector/internal/internal_marigold_vector.h index cb1df91..4f5678f 100644 --- a/source_code/MODULE_marigold_vector/internal/internal_marigold_vector.h +++ b/source_code/MODULE_marigold_vector/internal/internal_marigold_vector.h @@ -58,7 +58,13 @@ vector_struct vector_struct; vector_struct* -vector_initialize(); +vector_initialize(vector_struct* new_vector, + size_t item_size, + size_t starting_capacity, + vector_growth_rate_enum growth_rate, + int (*comparator)(const void*, const void*), + void (*item_free)(const void *), + bool is_multithread_safe); void vector_free_members(); diff --git a/source_code/MODULE_marigold_vector/marigold_vector.c b/source_code/MODULE_marigold_vector/marigold_vector.c index cf70100..a8ff784 100644 --- a/source_code/MODULE_marigold_vector/marigold_vector.c +++ b/source_code/MODULE_marigold_vector/marigold_vector.c @@ -11,8 +11,20 @@ vector_create(size_t item_size, void (*item_free)(const void *), bool is_multithread_safe) { - // allocate memory/mutex etc - return vector_initialize(); // actually set all internal values accordingly. + vector_struct* new_vector = calloc(1, sizeof(vector_struct)); + + if (!new_vector) + { + return NULL; + } + + return vector_initialize(new_vector, + item_size, + starting_capacity, + growth_rate, + comparator, + item_free, + is_multithread_safe); } bool @@ -125,6 +137,12 @@ vector_insert_at(vector_struct* vector, size_t index, const void* element) { + const bool is_thread_safe = vector_is_thread_safe(vector); + if (is_thread_safe) + { /* if thread safe enabled, locking before vector modification. */ + pthread_mutex_lock(vector->mutex_lock); + } + }