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, &times_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