diff --git a/AssemblerLib/GlobalSetup.h b/AssemblerLib/GlobalSetup.h index b795d4c55e43e32a1e6f92921e395435b60a12e8..fb29d3401a9f0b8a9574636f7024b4cd0bd7562e 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 d3232aceac3730fe631f82e565ccd2618ab3910d..c369f6bef3857898ec9d115e0592e75ff8964ed6 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. ///