From 92c54c9dbbf1a8fa2fe644298433a31a41647d1b Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Thu, 23 Dec 2021 19:26:04 +0100 Subject: [PATCH] Add parallelForeach() --- src/cpputils.h | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/cpputils.h b/src/cpputils.h index 35e2a70..c606a67 100644 --- a/src/cpputils.h +++ b/src/cpputils.h @@ -4,6 +4,7 @@ #include #include #include +#include namespace cpputils { namespace literals { @@ -118,4 +119,40 @@ bool is_in(First &&first, T && ... t) { return ((first == t) || ...); } + +template +void parallelForeach(T1 &container0, T2 &container1, Tcb &&callback) +{ + auto iter0 = std::begin(container0); + auto iter1 = std::begin(container1); + for (; + iter0 != std::end(container0) && iter1 != std::cend(container1); + iter0++, iter1++) + callback(*iter0, *iter1); +} + +template +void parallelForeach(T0 &container0, T1 &container1, T2 &container2, Tcb &&callback) +{ + auto iter0 = std::begin(container0); + auto iter1 = std::begin(container1); + auto iter2 = std::begin(container2); + for (; + iter0 != std::end(container0) && iter1 != std::cend(container1) && iter2 != std::cend(container2); + iter0++, iter1++, iter2++) + callback(*iter0, *iter1, *iter2); +} + +template +void parallelForeach(T0 &container0, T1 &container1, T2 &container2, T3 &container3, Tcb &&callback) +{ + auto iter0 = std::begin(container0); + auto iter1 = std::begin(container1); + auto iter2 = std::begin(container2); + auto iter3 = std::begin(container3); + for (; + iter0 != std::end(container0) && iter1 != std::cend(container1) && iter2 != std::cend(container2) && iter3 != std::cend(container3); + iter0++, iter1++, iter2++, iter3++) + callback(*iter0, *iter1, *iter2, *iter3); +} } // namespace cpputils