From d849c8766bceea896713c394f018a0361c2fd787 Mon Sep 17 00:00:00 2001 From: Christoph Lehmann <christoph.lehmann@ufz.de> Date: Sat, 9 Apr 2016 11:46:26 +0200 Subject: [PATCH] [AsmL] added executeMemberDereferenced() --- AssemblerLib/GlobalSetup.h | 7 +++++++ AssemblerLib/SerialExecutor.h | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/AssemblerLib/GlobalSetup.h b/AssemblerLib/GlobalSetup.h index b795d4c55e4..fb29d3401a9 100644 --- a/AssemblerLib/GlobalSetup.h +++ b/AssemblerLib/GlobalSetup.h @@ -53,6 +53,13 @@ struct GlobalSetup return Executor::executeDereferenced(std::forward<Args>(args)...); } + template <typename... Args> + static + void executeMemberDereferenced(Args&& ... args) + { + return Executor::executeMemberDereferenced(std::forward<Args>(args)...); + } + template <typename... Args> static void transform(Args&& ... args) diff --git a/AssemblerLib/SerialExecutor.h b/AssemblerLib/SerialExecutor.h index d3232aceac3..c369f6bef38 100644 --- a/AssemblerLib/SerialExecutor.h +++ b/AssemblerLib/SerialExecutor.h @@ -62,6 +62,24 @@ struct SerialExecutor f(i, *c[i], std::forward<Args_>(args)...); } + /// Executes the given \c method of the given \c object for each element + /// from the input \c container. + /// + /// This method is very similar to executeDereferenced(). + /// + /// \see executeDereferenced() + template <typename Container, typename Object, typename... MethodArgs, typename... Args> + static void + executeMemberDereferenced( + Object& object, + void (Object::*method)(MethodArgs... method_args) const, + Container const& container, Args&&... args) + { + for (std::size_t i = 0; i < container.size(); i++) { + (object.*method)(i, *container[i], std::forward<Args>(args)...); + } + } + /// Same as execute(f, c), but with two containers, where the second one is /// modified. /// -- GitLab