execution: Overloads of for_each and for_each_m taking ExecutionPolicy

* Adds additional overloads to `for_each` and `for_each_m` that accept execution policies.
* Execution policy is applied to the loop over subsets.
This commit is contained in:
Patrick Fasano
2022-07-21 12:19:58 -04:00
parent cc82fd2ae4
commit 6fc51c1b49
+28 -1
View File
@@ -3318,14 +3318,41 @@ public:
}
}
#if __cplusplus >= 201703L
template <class ExecutionPolicy, class F>
void for_each(ExecutionPolicy&& policy, F&& fCallback) const {
std::for_each(
std::forward<ExecutionPolicy>(policy), sets_.begin(), sets_.end(),
[&](auto const& inner) {
typename Lockable::SharedLock m(const_cast<Inner&>(inner));
std::for_each(inner.set_.begin(), inner.set_.end(), fCallback);
}
);
}
#endif
// this version allows to modify the values
void for_each_m(std::function<void (value_type&)> && fCallback) {
template <class F>
void for_each_m(F&& fCallback) {
for (auto& inner : sets_) {
typename Lockable::UniqueLock m(const_cast<Inner&>(inner));
std::for_each(inner.set_.begin(), inner.set_.end(), fCallback);
}
}
#if __cplusplus >= 201703L
template <class ExecutionPolicy, class F>
void for_each_m(ExecutionPolicy&& policy, F&& fCallback) {
std::for_each(
std::forward<ExecutionPolicy>(policy), sets_.begin(), sets_.end(),
[&](auto& inner) {
typename Lockable::UniqueLock m(const_cast<Inner&>(inner));
std::for_each(inner.set_.begin(), inner.set_.end(), fCallback);
}
);
}
#endif
// Extension API: support for heterogeneous keys.
//
// std::unordered_set<std::string> s;