Exemplo n.º 1
0
            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);
                        }));
            }
Exemplo n.º 2
0
            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))
                    );
            }