add vec_grow_to
This commit is contained in:
parent
f9a9f82a95
commit
9d03411979
@ -18,6 +18,8 @@ void vec_clear(Vector *vec);
|
|||||||
|
|
||||||
void vec_destroy(Vector *vec);
|
void vec_destroy(Vector *vec);
|
||||||
|
|
||||||
|
int vec_grow_to(Vector *vec, const size_t new_cap);
|
||||||
|
|
||||||
int vec_insert(Vector *vec, void *data, size_t index);
|
int vec_insert(Vector *vec, void *data, size_t index);
|
||||||
|
|
||||||
int vec_push(Vector *vec, void *data);
|
int vec_push(Vector *vec, void *data);
|
||||||
|
28
src/vector.c
28
src/vector.c
@ -33,14 +33,9 @@ int vec_init_with_capacity(Vector *vec, void (*destroy)(void *data), size_t capa
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int vec_grow(Vector *const vec) {
|
static int vec_expand(Vector *vec, size_t new_cap) {
|
||||||
if (vec->capacity == 0) {
|
vec->capacity = new_cap;
|
||||||
vec->capacity = 1;
|
vec->elements = reallocarray(vec->elements, new_cap, sizeof(void *));
|
||||||
} else {
|
|
||||||
vec->capacity *= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec->elements = reallocarray(vec->elements, vec->capacity, sizeof(void *));
|
|
||||||
|
|
||||||
if (vec->elements == NULL) {
|
if (vec->elements == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
@ -48,6 +43,23 @@ static int vec_grow(Vector *const vec) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int vec_grow(Vector *const vec) {
|
||||||
|
size_t new_cap;
|
||||||
|
if (vec->capacity == 0) {
|
||||||
|
new_cap = VEC_INIT_CAP; ;
|
||||||
|
} else {
|
||||||
|
new_cap = vec->capacity * 2;
|
||||||
|
}
|
||||||
|
return vec_expand(vec, new_cap);
|
||||||
|
}
|
||||||
|
|
||||||
|
int vec_grow_to(Vector *vec, const size_t new_cap) {
|
||||||
|
if (vec->capacity > new_cap) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return vec_expand(vec, new_cap);
|
||||||
|
}
|
||||||
|
|
||||||
void vec_clear(Vector *vec) {
|
void vec_clear(Vector *vec) {
|
||||||
vec_destroy(vec);
|
vec_destroy(vec);
|
||||||
vec_init(vec, vec->destroy);
|
vec_init(vec, vec->destroy);
|
||||||
|
@ -271,6 +271,10 @@ void test_vector() {
|
|||||||
printf("\ncap after clear: %zu\n", vec_cap(v));
|
printf("\ncap after clear: %zu\n", vec_cap(v));
|
||||||
printf("len after clear: %zu\n", vec_len(v));
|
printf("len after clear: %zu\n", vec_len(v));
|
||||||
|
|
||||||
|
vec_grow_to(v, 10);
|
||||||
|
assert(vec_cap(v) == 10);
|
||||||
|
assert(vec_len(v) == 0);
|
||||||
|
|
||||||
vec_destroy(v);
|
vec_destroy(v);
|
||||||
free(v);
|
free(v);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user