refactor(vector): add index to foreach

This commit is contained in:
2025-09-09 22:25:43 +02:00
parent 6b177c87c6
commit b2f7510d64
3 changed files with 5 additions and 5 deletions

View File

@@ -10,13 +10,13 @@ typedef struct my_elem {
} my_elem_s; } my_elem_s;
/* Functions used to iterate for each vector's element */ /* Functions used to iterate for each vector's element */
static void multiply(void *elem) { static void multiply(size_t index, void *elem) {
my_elem_s *e = (my_elem_s *)elem; my_elem_s *e = (my_elem_s *)elem;
e->age = e->age * 2; e->age = e->age * 2;
} }
/* Another way to use foreach /* Another way to use foreach
static void print(void *elem) { static void print(size_t index, void *elem) {
my_elem_s *e = (my_elem_s *)elem; my_elem_s *e = (my_elem_s *)elem;
printf("%s (%d)\n", e->name, e->age); printf("%s (%d)\n", e->name, e->age);
} }

View File

@@ -282,7 +282,7 @@ int vec_set(vec_s *vec, size_t index, void *value) {
return 0; return 0;
} }
int vec_foreach(vec_s *vec, void (*fefn)(void *)) { int vec_foreach(vec_s *vec, void (*fefn)(size_t index, void *elem)) {
if (vec == NULL || fefn == NULL) { if (vec == NULL || fefn == NULL) {
return -1; return -1;
} }
@@ -292,7 +292,7 @@ int vec_foreach(vec_s *vec, void (*fefn)(void *)) {
} }
for (size_t i = 0; i < vec->size; ++i) { for (size_t i = 0; i < vec->size; ++i) {
fefn((char *)vec->data + (i * vec->elem_size)); fefn(i, (char *)vec->data + (i * vec->elem_size));
} }
mtx_unlock(&vec->lock); mtx_unlock(&vec->lock);

View File

@@ -37,7 +37,7 @@ int vec_set(vec_s *vec, size_t index, void *value);
int vec_clear(vec_s *vec); int vec_clear(vec_s *vec);
int vec_foreach(vec_s *vec, void (*fefn)(void *)); int vec_foreach(vec_s *vec, void (*fefn)(size_t index, void *elem));
// void *vec_sort(vec_s *, void (* sortfn)(void *a, void *b)) // void *vec_sort(vec_s *, void (* sortfn)(void *a, void *b))