static typename util::detail::algorithm_result< ExPolicy, FwdIter >::type parallel(ExPolicy const& policy, FwdIter first, FwdIter last, F && f) { if (first == last) { return util::detail::algorithm_result<ExPolicy, FwdIter>:: get(std::move(first)); } return util::partitioner<ExPolicy, FwdIter, FwdIter>:: call( policy, first, std::distance(first, last), [f](FwdIter it, std::size_t part_count) { return sequential_min_element(it, part_count, f); }, hpx::util::unwrapped([f](std::vector<FwdIter> && positions) { return sequential_min_element_ind( positions.begin(), positions.size(), f); })); }
static typename util::detail::algorithm_result< ExPolicy, FwdIter >::type parallel(ExPolicy && policy, FwdIter first, FwdIter last, F && f, Proj && proj) { if (first == last) { return util::detail::algorithm_result<ExPolicy, FwdIter>:: get(std::move(first)); } auto f1 = [f, proj, policy](FwdIter it, std::size_t part_count) { return sequential_min_element( policy, it, part_count, f, proj); }; auto f2 = [f, proj, policy](std::vector<FwdIter> && positions) { return min_element::sequential_minmax_element_ind( policy, positions.begin(), positions.size(), f, proj); }; return util::partitioner<ExPolicy, FwdIter, FwdIter>::call( std::forward<ExPolicy>(policy), first, std::distance(first, last), std::move(f1), hpx::util::unwrapped(std::move(f2)) ); }