
#ifndef PLS_PARALLEL_REDUCE_H
#define PLS_PARALLEL_REDUCE_H

#include "loop_partition_strategy.h"

namespace pls::algorithm {

template<typename RandomIt, typename Function, typename ExecutionStrategy>
static auto reduce(RandomIt first,
            RandomIt last,
            decltype(*first) neutral,
            const Function &reducer,
            ExecutionStrategy execution_strategy);

template<typename RandomIt, typename Function>
static auto reduce(RandomIt first,
            RandomIt last,
            decltype(*first) neutral,
            const Function &reducer);
}
#include "reduce_impl.h"

#endif //PLS_PARALLEL_REDUCE_H
