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:
+7
-24
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user