implemented erase from vector

This commit is contained in:
Warwick 2024-02-08 11:31:51 +00:00
parent 68c626d800
commit 57ff54aac9
3 changed files with 20 additions and 7 deletions

View file

@ -6,16 +6,18 @@
int main() { int main() {
vector *vec = vec_create(sizeof(int)); vector *vec = vec_create(sizeof(int));
for (int x = 0; x < 100; x++) { for (int x = 0; x < 110; x++) {
vec_push_back(vec, &x); vec_push_back(vec, &x);
} }
int i = 99999999; int i = 99999999;
vec_push_index(vec, &i, 5); vec_insert(vec, &i, 5);
vec_push_front(vec, &i); vec_push_front(vec, &i);
printf("Capacity before shrink: %zu | ", vec_capacity(vec)); printf("Capacity before shrink: %zu | ", vec_capacity(vec));
vec_shrink_to_fit(vec); vec_shrink_to_fit(vec);
printf("Capacity after: %zu\n", vec_capacity(vec)); printf("Capacity after: %zu\n", vec_capacity(vec));
for (int x = 0; x < 102; x++) { vec_erase(vec, 0);
vec_erase(vec, 101);
for (int x = 0; x < 110; x++) {
printf("%d ", *(int *)vec_get(vec, x)); printf("%d ", *(int *)vec_get(vec, x));
} }
printf("\n"); printf("\n");

View file

@ -53,9 +53,9 @@ void vec_push_back(vector *vec, void *data) {
vec->size++; vec->size++;
} }
void vec_push_front(vector *vec, void *data) { vec_push_index(vec, data, 0); } void vec_push_front(vector *vec, void *data) { vec_insert(vec, data, 0); }
void vec_push_index(vector *vec, void *data, uint index) { void vec_insert(vector *vec, void *data, uint index) {
assert(vec != NULL); assert(vec != NULL);
assert(index <= vec->size); assert(index <= vec->size);
// TODO: handle wraparound // TODO: handle wraparound
@ -68,6 +68,16 @@ void vec_push_index(vector *vec, void *data, uint index) {
memcpy(vec->elements + (index * vec->element_size), data, vec->element_size); memcpy(vec->elements + (index * vec->element_size), data, vec->element_size);
vec->size++; vec->size++;
} }
void vec_erase(vector *vec, uint index) {
assert(vec != NULL);
assert(index <= vec->size);
// TODO: handle wraparound
memcpy(vec->elements + index * vec->element_size,
vec->elements + (index + 1) * vec->element_size,
(vec->size - index) * vec->element_size);
vec->size--;
}
void *vec_get(vector *vec, uint index) { void *vec_get(vector *vec, uint index) {
// TODO: handle wraparound // TODO: handle wraparound

View file

@ -14,8 +14,9 @@ void vec_shrink_to_fit(vector *vec);
// Which means you can only push one element at a time // Which means you can only push one element at a time
void vec_push_back(vector *vec, void *data); void vec_push_back(vector *vec, void *data);
void vec_push_front(vector *vec, void *data); void vec_push_front(vector *vec, void *data);
void vec_push_index(vector *vec, void *data, uint index); void vec_insert(vector *vec, void *data, uint index);
void vec_erase(vector *vec, uint index);
void* vec_get(vector *vec, uint index); void *vec_get(vector *vec, uint index);
size_t vec_size(vector *vec); size_t vec_size(vector *vec);
size_t vec_capacity(vector *vec); size_t vec_capacity(vector *vec);