a much more simplified version of push_back with reallocf instead of memcpy as it is faster (no copying just resizing the vector (entire point of vector))

This commit is contained in:
Andrew Haynes
2026-04-17 14:15:24 -04:00
parent c05e92dec0
commit b77f260a2c
9 changed files with 601 additions and 24 deletions
+7 -24
View File
@@ -57,10 +57,6 @@ create(const Vec8_t* input)
{
vec.size = input->size + 1;
}
if (input->capacity >= vec.capacity)
{
vec.capacity = 2 * input->capacity;
}
vec.arr = calloc(vec.capacity, sizeof(char));
return vec;
}
@@ -149,30 +145,17 @@ back(const Vec8_t* vec)
Vec8_t
add_back(Vec8_t* vec, const char val)
{
Vec8_t ret = { .arr = nullptr, .capacity = 0, .size = 0 };
if (vec->size < vec->capacity)
{
vec->arr[vec->size] = val;
vec->size++;
return *vec;
}
if (vec->size >= vec->capacity)
{
Vec8_t nvec = create(vec);
if(nvec.arr == nullptr) {
printf("Malloc failed and returned nullptr: Returning old vector");
vec->capacity *= 2;
char* nvec = reallocf(vec->arr, vec->capacity * sizeof(char));
if(nvec == NULL) {
return *vec;
}
memcpy(&nvec.arr[0], &vec->arr[0], vec->size * sizeof(char));
if (nvec.arr && (nvec.size > 0 || nvec.size > vec->size))
{
nvec.arr[vec->size] = val;
}
free(vec->arr);
return nvec;
}
return ret;
}
vec->arr[vec->size] = val;
vec->size++;
return *vec;
}
int