From 19935161c612fca4534002651dca08050ff2a1e3 Mon Sep 17 00:00:00 2001
From: Simon Praetorius <simon.praetorius@tu-dresden.de>
Date: Wed, 1 May 2019 15:21:17 +0200
Subject: [PATCH] extend apply and for_each functions

---
 src/amdis/common/Apply.hpp   |  7 +++++++
 src/amdis/common/ForEach.hpp | 11 +++++++++++
 2 files changed, 18 insertions(+)

diff --git a/src/amdis/common/Apply.hpp b/src/amdis/common/Apply.hpp
index 21e2fef0..46073a01 100644
--- a/src/amdis/common/Apply.hpp
+++ b/src/amdis/common/Apply.hpp
@@ -41,6 +41,13 @@ namespace AMDiS
       return apply(FWD(f), std::forward_as_tuple(args...));
     }
 
+    template <std::size_t N, class Functor>
+    constexpr decltype(auto) apply_indices(Functor&& f)
+    {
+      return Impl_::apply_indices_impl(FWD(f), index_t<0>{},
+          std::make_index_sequence<N>{});
+    }
+
     template <class Functor, std::size_t N>
     constexpr decltype(auto) apply_indices(Functor&& f, index_t<N>)
     {
diff --git a/src/amdis/common/ForEach.hpp b/src/amdis/common/ForEach.hpp
index 7768a561..f64d6177 100644
--- a/src/amdis/common/ForEach.hpp
+++ b/src/amdis/common/ForEach.hpp
@@ -15,6 +15,17 @@ namespace AMDiS
       void ignored_evaluation(std::initializer_list<T>&&) { /* do nothing */ }
     }
 
+    template <class Functor, class... Args>
+    constexpr void for_variadic(Functor&& f, Args&&... args)
+    {
+      using std::get;
+#if AMDIS_HAS_CXX_FOLD_EXPRESSIONS
+      (f(FWD(args)),...);
+#else
+      Impl_::ignored_evaluation<int>({0, (f(FWD(args)), 0)...});
+#endif
+    }
+
     template <std::size_t... I, class Tuple, class Functor>
     constexpr void for_each(std::index_sequence<I...>, Tuple&& tuple, Functor&& f)
     {
-- 
GitLab