27 #ifndef EMBB_ALGORITHMS_MERGE_SORT_H_ 28 #define EMBB_ALGORITHMS_MERGE_SORT_H_ 31 #include <embb/mtapi/job.h> 32 #include <embb/mtapi/execution_policy.h> 33 #include <embb/base/memory_allocation.h> 36 namespace algorithms {
74 template<
typename RAI,
typename ComparisonFunction>
81 ComparisonFunction comparison
82 = std::less<
typename std::iterator_traits<RAI>::value_type>(),
124 template<
typename RAI,
typename RAITemp,
typename ComparisonFunction>
130 RAITemp temporary_first,
133 ComparisonFunction comparison
134 = std::less<
typename std::iterator_traits<RAI>::value_type>(),
141 size_t block_size = 0
155 template<
typename RAI,
typename RAITemp>
159 RAITemp temporary_first,
168 template<
typename RAI,
typename RAITemp,
typename ComparisonFunction>
172 RAITemp temporary_first,
173 ComparisonFunction comparison,
181 template<
typename RAI,
typename ComparisonFunction>
185 ComparisonFunction comparison,
189 typedef base::Allocation Alloc;
190 typename std::iterator_traits<RAI>::difference_type distance = last - first;
191 typedef typename std::iterator_traits<RAI>::value_type value_type;
194 }
else if (distance < 0) {
197 value_type* temporary =
static_cast<value_type*
>(
198 Alloc::Allocate(distance *
sizeof(value_type)));
201 MergeSort(first, last, temporary, comparison, policy, block_size);
204 Alloc::Free(temporary);
208 #ifdef EMBB_USE_EXCEPTIONS 212 Alloc::Free(temporary);
218 template<
typename RAI>
224 std::less<
typename std::iterator_traits<RAI>::value_type>(),
231 template<
typename RAI,
typename ComparisonFunction>
235 ComparisonFunction comparison
243 template<
typename RAI,
typename ComparisonFunction>
247 ComparisonFunction comparison,
256 template<
typename RAI,
typename RAITemp>
260 RAITemp temporary_first
263 std::less<
typename std::iterator_traits<RAI>::value_type>(),
270 template<
typename RAI,
typename RAITemp,
typename ComparisonFunction>
274 RAITemp temporary_first,
275 ComparisonFunction comparison
277 MergeSort(first, last, temporary_first, comparison,
284 template<
typename RAI,
typename RAITemp,
typename ComparisonFunction>
288 RAITemp temporary_first,
289 ComparisonFunction comparison,
292 MergeSort(first, last, temporary_first, comparison, policy, 0);
295 #endif // else DOXYGEN 304 #include<embb/algorithms/internal/merge_sort-inl.h> 306 #endif // EMBB_ALGORITHMS_MERGE_SORT_H_ Definition: lock_free_mpmc_queue.h:40
void MergeSort(RAI first, RAI last, RAITemp temporary_first, ComparisonFunction comparison=std::less< typename std::iterator_traits< RAI >::value_type >(), const embb::mtapi::ExecutionPolicy &policy=embb::mtapi::ExecutionPolicy(), size_t block_size=0)
Sorts a range of elements using a parallel merge sort algorithm without implicit allocation of dynami...
Indicates a general error.
Definition: exceptions.h:264
Represents a collection of Actions.
Definition: job.h:41
Describes the execution policy of a parallel algorithm.
Definition: execution_policy.h:48
void MergeSortAllocate(RAI first, RAI last, ComparisonFunction comparison=std::less< typename std::iterator_traits< RAI >::value_type >(), const embb::mtapi::ExecutionPolicy &policy=embb::mtapi::ExecutionPolicy(), size_t block_size=0)
Sorts a range of elements using a parallel merge sort algorithm with implicit allocation of dynamic m...