diff --git a/header/vectors.h b/header/vectors.h index 8c3dfca86a783d4995bea46f38b93eb249ccfe8a..fdef828975bd4c58ec6ac706537de5f1ab2269aa 100644 --- a/header/vectors.h +++ b/header/vectors.h @@ -31,5 +31,6 @@ void vector_empty(vector vec); void vector_free(vector vec); void vector_print(vector vec, void (*print)(type)); vector vector_map(vector vec, type (*f)(type)); +vector vector_filter(vector vec, bool (*f)(type)); #endif \ No newline at end of file diff --git a/src/test_vectors.c b/src/test_vectors.c index 01db5a0c5d23162a59ac6de7a1f3ffe386622e17..bda3a8743aa5897026384d706920d02fc5a1c8c2 100644 --- a/src/test_vectors.c +++ b/src/test_vectors.c @@ -12,6 +12,7 @@ void print_type(type val); int times_two(type a); +bool lower_than_five(type a); int main() { @@ -63,12 +64,17 @@ int main() //Test Vector map vector test_2 = vector_map(test, ×_two); vector_print(test_2, &print_type); + printf("\n"); //Test Vector filter + vector test_3 = vector_filter(test_2, lower_than_five); + vector_print(test_3, &print_type); + printf("\n"); //Test Vector Free vector_free(test); vector_free(test_2); + vector_free(test_3); return 0; } @@ -81,4 +87,9 @@ void print_type(type val) int times_two(type a) { return 2 * a; +} + +bool lower_than_five(type a) +{ + return (a < 5); } \ No newline at end of file diff --git a/src/vectors.c b/src/vectors.c index 92590bb2a5e415a96972390e5c8eb38c82a9e800..83a7159a73ff9e87fb2f8d6a8cac77ec7b83fa6c 100644 --- a/src/vectors.c +++ b/src/vectors.c @@ -147,3 +147,15 @@ vector vector_map(vector vec, type (*f)(type)) return new_vec; } +vector vector_filter(vector vec, bool (*f)(type)) +{ + vector new_vec = vector_create(); + for (int i = 0; i < vec->length; i++) + { + if(f(vec->content[i])) + { + vector_push(new_vec, vec->content[i]); + } + } + return new_vec; +} \ No newline at end of file