implemented shrink_to_fit for vector
This commit is contained in:
parent
4be7bff040
commit
68c626d800
3 changed files with 26 additions and 4 deletions
|
|
@ -6,13 +6,16 @@
|
|||
|
||||
int main() {
|
||||
vector *vec = vec_create(sizeof(int));
|
||||
for (int x = 0; x < 10; x++) {
|
||||
for (int x = 0; x < 100; x++) {
|
||||
vec_push_back(vec, &x);
|
||||
}
|
||||
int i = 99999999;
|
||||
vec_push_index(vec, &i, 5);
|
||||
vec_push_front(vec, &i);
|
||||
for (int x = 0; x < 12; x++) {
|
||||
printf("Capacity before shrink: %zu | ", vec_capacity(vec));
|
||||
vec_shrink_to_fit(vec);
|
||||
printf("Capacity after: %zu\n", vec_capacity(vec));
|
||||
for (int x = 0; x < 102; x++) {
|
||||
printf("%d ", *(int *)vec_get(vec, x));
|
||||
}
|
||||
printf("\n");
|
||||
|
|
|
|||
16
src/vec.c
16
src/vec.c
|
|
@ -38,6 +38,12 @@ void vec_grow(vector *vec) {
|
|||
assert(vec->elements != NULL);
|
||||
}
|
||||
|
||||
void vec_shrink_to_fit(vector *vec) {
|
||||
assert(vec != NULL);
|
||||
vec->capacity = vec->size;
|
||||
vec->elements = reallocarray(vec->elements, vec->size, vec->element_size);
|
||||
}
|
||||
|
||||
void vec_push_back(vector *vec, void *data) {
|
||||
assert(vec != NULL);
|
||||
vec_grow(vec);
|
||||
|
|
@ -69,3 +75,13 @@ void *vec_get(vector *vec, uint index) {
|
|||
assert(index <= vec->size);
|
||||
return vec->elements + index * vec->element_size;
|
||||
}
|
||||
|
||||
size_t vec_size(vector *vec) {
|
||||
assert(vec != NULL);
|
||||
return vec->size;
|
||||
}
|
||||
|
||||
size_t vec_capacity(vector *vec) {
|
||||
assert(vec != NULL);
|
||||
return vec->capacity;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ void vec_destroy(vector *vec);
|
|||
|
||||
// Checks and grows vector only if necessary
|
||||
void vec_grow(vector *vec);
|
||||
void vec_shrink_to_fit(vector *vec);
|
||||
|
||||
// Assumes data is the same size as the element size
|
||||
// Which means you can only push one element at a time
|
||||
|
|
@ -16,3 +17,5 @@ void vec_push_front(vector *vec, void *data);
|
|||
void vec_push_index(vector *vec, void *data, uint index);
|
||||
|
||||
void* vec_get(vector *vec, uint index);
|
||||
size_t vec_size(vector *vec);
|
||||
size_t vec_capacity(vector *vec);
|
||||
|
|
|
|||
Loading…
Reference in a new issue