From 71e7f697e2faa5fff085be27522c839abe671638 Mon Sep 17 00:00:00 2001
From: Abivarman <abivarman.kandiah@etu.hesge.ch>
Date: Thu, 24 Feb 2022 13:53:34 +0100
Subject: [PATCH] add Vector Reduce

---
 header/vectors.h   |  1 +
 src/test_vectors.c | 11 +++++++++++
 src/vectors.c      |  9 +++++++++
 3 files changed, 21 insertions(+)

diff --git a/header/vectors.h b/header/vectors.h
index fdef828..0c4c594 100644
--- a/header/vectors.h
+++ b/header/vectors.h
@@ -32,5 +32,6 @@ 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));
+type vector_reduce(vector vec, type neutral, type (*f)(type, type));
 
 #endif
\ No newline at end of file
diff --git a/src/test_vectors.c b/src/test_vectors.c
index bda3a87..40fb57b 100644
--- a/src/test_vectors.c
+++ b/src/test_vectors.c
@@ -13,6 +13,7 @@
 void print_type(type val);
 int times_two(type a);
 bool lower_than_five(type a);
+type add(type lhs, type rhs);
 
 int main()
 {	
@@ -71,6 +72,11 @@ int main()
 	vector_print(test_3, &print_type);
 	printf("\n");
 
+	//Test Vector Reduce
+	type sum = vector_reduce(test_3, 0, add);
+	print_type(sum);
+	printf("\n");
+	
 	//Test Vector Free
 	vector_free(test);
 	vector_free(test_2);
@@ -92,4 +98,9 @@ int times_two(type a)
 bool lower_than_five(type a) 
 {
     return (a < 5);
+}
+
+type add(type lhs, type rhs) 
+{
+    return lhs + rhs;
 }
\ No newline at end of file
diff --git a/src/vectors.c b/src/vectors.c
index 83a7159..79fef3a 100644
--- a/src/vectors.c
+++ b/src/vectors.c
@@ -158,4 +158,13 @@ vector vector_filter(vector vec, bool (*f)(type))
 		}
 	}
 	return new_vec;
+}
+
+type vector_reduce(vector vec, type neutral, type (*f)(type, type))
+{
+	for (int i = 0; i < vec->length; i++)
+	{
+		neutral = f(neutral, vec->content[i]);
+	}
+	return neutral;
 }
\ No newline at end of file
-- 
GitLab