From 0f5865cef936d1c02e51e249eadff443a9c7a6b4 Mon Sep 17 00:00:00 2001
From: jstark <jstark@mpi-cbg.de>
Date: Mon, 3 Jan 2022 14:45:23 +0100
Subject: [PATCH] Deducing type from property.

---
 .../HelpFunctionsForGrid.hpp                  | 21 +++++++++++--------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/level_set/redistancing_Sussman/HelpFunctionsForGrid.hpp b/src/level_set/redistancing_Sussman/HelpFunctionsForGrid.hpp
index 86e599f8..dc60da19 100644
--- a/src/level_set/redistancing_Sussman/HelpFunctionsForGrid.hpp
+++ b/src/level_set/redistancing_Sussman/HelpFunctionsForGrid.hpp
@@ -188,11 +188,12 @@ typename grid_type::stype get_smallest_spacing(grid_type & grid)
  * @return Double variable that contains the sum over all grid nodes of the difference between the value stored at \p
  *         Prop1 and the value stored at \p Prop2.
  */
-template <size_t Prop1, size_t Prop2, typename prop_type, typename grid_type>
-prop_type average_difference(grid_type & grid)
+template <size_t Prop1, size_t Prop2, typename grid_type>
+auto average_difference(grid_type & grid)
 {
-	prop_type total_diff = 0;
 	auto dom = grid.getDomainIterator();
+	typedef typename std::decay_t<decltype(grid.template get<Prop1>(dom.get()))> prop_type;
+	prop_type total_diff = 0;
 	while (dom.isNext())
 	{
 		auto key = dom.get();
@@ -209,11 +210,12 @@ prop_type average_difference(grid_type & grid)
  * @param grid Input OpenFPM grid.
  * @return Double variable that contains the maximum value of property \p Prop in \p grid.
  */
-template <size_t Prop, typename prop_type, typename grid_type>
-prop_type get_max_val(grid_type & grid)
+template <size_t Prop, typename grid_type>
+auto get_max_val(grid_type & grid)
 {
-	prop_type max_value = std::numeric_limits<prop_type>::lowest();
 	auto dom = grid.getDomainIterator();
+	typedef typename std::decay_t<decltype(grid.template get<Prop>(dom.get()))> prop_type;
+	prop_type max_value = std::numeric_limits<prop_type>::lowest();
 	while(dom.isNext())
 	{
 		auto key = dom.get();
@@ -233,11 +235,12 @@ prop_type get_max_val(grid_type & grid)
  * @param grid Input OpenFPM grid.
  * @return Double variable that contains the minimum value of property \p Prop in \p grid.
  */
-template <size_t Prop, typename prop_type, typename grid_type>
-prop_type get_min_val(grid_type & grid)
+template <size_t Prop, typename grid_type>
+auto get_min_val(grid_type & grid)
 {
-	prop_type min_value = std::numeric_limits<prop_type>::max();
 	auto dom = grid.getDomainIterator();
+	typedef typename std::decay_t<decltype(grid.template get<Prop>(dom.get()))> prop_type;
+	prop_type min_value = std::numeric_limits<prop_type>::max();
 	while(dom.isNext())
 	{
 		auto key = dom.get();
-- 
GitLab