20 template <
class F,
class... Ts>
auto run_async(F &&action, Ts &&...params) {
21 return std::async(std::launch::async, std::forward<F>(action), std::forward<Ts>(params)...);
33 template <
class Policy,
class Index,
class UnaryFunction>
34 auto parallel_for(Policy &&policy, Index first, Index last, UnaryFunction func) {
35 auto range = std::vector<size_t>(last - first + 1);
36 std::iota(range.begin(), range.end(), first);
37 std::for_each(policy, range.begin(), range.end(), std::move(func));
48 template <
class Policy,
class T,
class UnaryPredicate>
50 auto index_mutex = std::mutex{};
51 auto result = std::vector<size_t>{};
52 parallel_for(policy,
size_t{0}, data.size() - 1, [&](
size_t index) {
53 if (pred(data[index])) {
54 auto lock = std::unique_lock{index_mutex};
55 result.emplace_back(index);
Top-level namespace for Health-GPS Core C++ API.
Definition: analysis.h:7
auto run_async(F &&action, Ts &&...params)
Run a given function asynchronous.
Definition: thread_util.h:20
auto find_index_of_all(Policy &&policy, const T &data, UnaryPredicate pred)
Finds index of all occurrences in a container.
Definition: thread_util.h:49
constexpr auto execution_policy
Default execution policy.
Definition: thread_util.h:12
auto parallel_for(Policy &&policy, Index first, Index last, UnaryFunction func)
Parallel for each over an indexed accessed containers.
Definition: thread_util.h:34
@ result
Simulation result message.