From 32fc7414cdd2d3ef7a67fda16410a1cb6e97464b Mon Sep 17 00:00:00 2001 From: Abivarman <abivarman.kandiah@etu.hesge.ch> Date: Thu, 24 Feb 2022 13:42:58 +0100 Subject: [PATCH] Add Vector filter --- header/vectors.h | 1 + src/test_vectors.c | 11 +++++++++++ src/vectors.c | 12 ++++++++++++ 3 files changed, 24 insertions(+) diff --git a/header/vectors.h b/header/vectors.h index 8c3dfca..fdef828 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 01db5a0..bda3a87 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 92590bb..83a7159 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 -- GitLab