
#ifndef PLS_PARALLEL_FOR_H
#define PLS_PARALLEL_FOR_H

#include "loop_partition_strategy.h"

namespace pls::algorithm {

template<typename Function, typename ExecutionStrategy>
static void for_each_range(unsigned long first,
                           unsigned long last,
                           const Function &function,
                           ExecutionStrategy &execution_strategy);

template<typename Function>
static void for_each_range(unsigned long first,
                           unsigned long last,
                           const Function &function);

template<typename RandomIt, typename Function, typename ExecutionStrategy>
static void for_each(RandomIt first,
                     RandomIt last,
                     const Function &function,
                     ExecutionStrategy execution_strategy);

template<typename RandomIt, typename Function>
static void for_each(RandomIt first,
                     RandomIt last,
                     const Function &function);
}
#include "for_each_impl.h"

#endif //PLS_PARALLEL_FOR_H
