| 244 | |
| 245 | template <class Iterator> |
| 246 | void fork_join_sort(Iterator begin, Iterator end) |
| 247 | { |
| 248 | std::size_t n = end - begin; |
| 249 | if (n > 32768) |
| 250 | { |
| 251 | { |
| 252 | fork_executor fork(pool); |
| 253 | join_guard join(fork); |
| 254 | fork.execute([=]{ fork_join_sort(begin, begin + n / 2); }); |
| 255 | fork.execute([=]{ fork_join_sort(begin + n / 2, end); }); |
| 256 | } |
| 257 | std::inplace_merge(begin, begin + n / 2, end); |
| 258 | } |
| 259 | else |
| 260 | { |
| 261 | std::sort(begin, end); |
| 262 | } |
| 263 | } |
| 264 | |
| 265 | int main(int argc, char* argv[]) |
| 266 | { |