From 76247fec681d91f74cf29545a80f6070e2ce7e43 Mon Sep 17 00:00:00 2001 From: epochryphon Date: Tue, 26 May 2026 13:40:09 -0500 Subject: [PATCH] added append implementation --- .../.marigold_vector.c.kate-swp | Bin 0 -> 460 bytes .../internal/internal_marigold_vector.h | 9 +++-- .../MODULE_marigold_vector/marigold_vector.c | 32 +++++++++++++++++- 3 files changed, 38 insertions(+), 3 deletions(-) create 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 new file mode 100644 index 0000000000000000000000000000000000000000..9ab88555d157fa1adcf87957ac58af5ba3e702f5 GIT binary patch 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 literal 0 HcmV?d00001 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 a2ef07b..cb1df91 100644 --- a/source_code/MODULE_marigold_vector/internal/internal_marigold_vector.h +++ b/source_code/MODULE_marigold_vector/internal/internal_marigold_vector.h @@ -57,8 +57,13 @@ vector_struct } vector_struct; -vector_struct* vector_initialize(); +vector_struct* +vector_initialize(); -void vector_free_members(); +void +vector_free_members(); + +bool +vector_grow(vector_struct* vector); #endif /* INTERNAL_MARIGOLD_VECTOR_H */ diff --git a/source_code/MODULE_marigold_vector/marigold_vector.c b/source_code/MODULE_marigold_vector/marigold_vector.c index 3c0bf40..cf70100 100644 --- a/source_code/MODULE_marigold_vector/marigold_vector.c +++ b/source_code/MODULE_marigold_vector/marigold_vector.c @@ -1,6 +1,7 @@ #include "marigold_vector.h" #include +#include vector_struct* vector_create(size_t item_size, @@ -85,9 +86,38 @@ vector_get_raw_data_pointer(const vector_struct* vector) } bool -vector_append(vector_struct* vector, const void* element) +vector_append(vector_struct* vector, + 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); + } + if (vector->current_occupancy == vector->current_capacity) + { + if (!vector_grow(vector)) + { /* failed to grow vector (probably out of memory)*/ + if (is_thread_safe) + { /* unlocking mutex during fail case if it is locked. */ + pthread_mutex_unlock(vector->mutex_lock); + } + return false; /* returns false to show append failed. */ + } + } + + char* data = (char*)vector->data_pointer; + size_t offset = vector->current_occupancy * vector->item_size; + memcpy(data + offset, element, vector->item_size); + vector->current_occupancy++; + + if (is_thread_safe) + { /* unlocking mutex post vector modification if it exists/is locked. */ + pthread_mutex_unlock(vector->mutex_lock); + } + + return true; /* returns true to show append success. */ } bool