14 #ifndef STXXL_IN_MEMORY_SORT_HEADER
15 #define STXXL_IN_MEMORY_SORT_HEADER
17 #include <stxxl/bits/namespace.h>
18 #include <stxxl/bits/common/simple_vector.h>
19 #include <stxxl/bits/io/request_operations.h>
20 #include <stxxl/bits/algo/adaptor.h>
21 #include <stxxl/bits/mng/adaptor.h>
22 #include <stxxl/bits/parallel.h>
27 __STXXL_BEGIN_NAMESPACE
29 template <
typename ExtIterator_,
typename StrictWeakOrdering_>
30 void stl_in_memory_sort(ExtIterator_ first, ExtIterator_ last, StrictWeakOrdering_ cmp)
32 typedef typename ExtIterator_::vector_type::value_type value_type;
33 typedef typename ExtIterator_::block_type block_type;
35 STXXL_VERBOSE(
"stl_in_memory_sort, range: " << (last - first));
37 unsigned_type nblocks = last.bid() - first.bid() + (last.block_offset() ? 1 : 0);
38 simple_vector<block_type> blocks(nblocks);
39 simple_vector<request_ptr> reqs(nblocks);
42 for (i = 0; i < nblocks; ++i)
43 reqs[i] = blocks[i].read(*(first.bid() + i));
48 unsigned_type last_block_correction = last.block_offset() ? (block_type::size - last.block_offset()) : 0;
50 sort(make_element_iterator(blocks.begin(), first.block_offset()),
51 make_element_iterator(blocks.begin(), nblocks * block_type::size - last_block_correction),
54 for (i = 0; i < nblocks; ++i)
55 reqs[i] = blocks[i].write(*(first.bid() + i));
63 #endif // !STXXL_IN_MEMORY_SORT_HEADER
void sort(ExtIterator_ first, ExtIterator_ last, StrictWeakOrdering_ cmp, unsigned_type M)
Sort records comparison-based.
Definition: sort.h:700
void wait_all(request_iterator_ reqs_begin, request_iterator_ reqs_end)
Collection of functions to track statuses of a number of requests.
Definition: request_operations.h:36