13 #ifndef STXXL_CONTAINERS_SORTER_HEADER
14 #define STXXL_CONTAINERS_SORTER_HEADER
21 #ifndef STXXL_VERBOSE_SORTER
22 #define STXXL_VERBOSE_SORTER STXXL_VERBOSE2
60 template <
typename ValueType,
72 block_size = BlockSize
93 enum { STATE_INPUT, STATE_OUTPUT } m_state;
107 : m_state(STATE_INPUT),
108 m_runs_creator(cmp, memory_to_use),
109 m_runs_merger(cmp, memory_to_use)
114 : m_state(STATE_INPUT),
115 m_runs_creator(cmp, creator_memory_to_use),
116 m_runs_merger(cmp, merger_memory_to_use)
128 if (m_state == STATE_OUTPUT)
129 m_runs_merger.deallocate();
131 m_runs_creator.allocate();
132 m_state = STATE_INPUT;
138 assert(m_state == STATE_INPUT);
139 m_runs_creator.push(val);
150 if (m_state == STATE_OUTPUT)
152 m_runs_merger.deallocate();
155 m_runs_creator.deallocate();
161 if (m_state == STATE_OUTPUT)
163 m_runs_merger.deallocate();
164 m_runs_creator.result()->clear();
167 m_runs_creator.deallocate();
178 if (m_state == STATE_OUTPUT)
180 m_runs_merger.deallocate();
183 m_runs_creator.deallocate();
184 m_runs_merger.initialize(m_runs_creator.result());
185 m_state = STATE_OUTPUT;
191 m_runs_merger.set_memory_to_use(merger_memory_to_use);
203 assert(m_state == STATE_INPUT);
205 m_runs_merger.initialize(m_runs_creator.result());
206 m_state = STATE_OUTPUT;
212 assert(m_state == STATE_OUTPUT);
214 m_runs_merger.deallocate();
216 m_state = STATE_INPUT;
225 m_runs_merger.set_memory_to_use(merger_memory_to_use);
236 if (m_state == STATE_INPUT)
237 return m_runs_creator.size();
239 return m_runs_merger.size();
244 assert(m_state == STATE_OUTPUT);
245 return m_runs_merger.empty();
256 assert(m_state == STATE_OUTPUT);
257 return *m_runs_merger;
263 return &(operator * ());
269 assert(m_state == STATE_OUTPUT);
281 #endif // !STXXL_CONTAINERS_SORTER_HEADER
sorter(const cmp_type &cmp, unsigned_type creator_memory_to_use, unsigned_type merger_memory_to_use)
Constructor variant with differently sizes runs_creator and runs_merger.
void finish()
Finish push input state and deallocate input buffer.
AllocStrategy alloc_strategy_type
#define STXXL_DEFAULT_BLOCK_SIZE(type)
stream::runs_merger< typename runs_creator_type::sorted_runs_type, cmp_type, alloc_strategy_type > runs_merger_type
corresponding runs merger type
runs_merger_type m_runs_merger
runs merger reading items when in STATE_OUTPUT
void sort(ExtIterator first, ExtIterator last, StrictWeakOrdering cmp, unsigned_type M)
Sort records comparison-based, see stxxl::sort -- Sorting Comparison-Based.
runs_creator_type m_runs_creator
runs creator object holding all items
#define STXXL_DEFAULT_ALLOC_STRATEGY
uint_pair & operator++()
prefix increment operator (directly manipulates the integer parts)
void clear()
Remove all items and return to input state.
void finish_clear()
Deallocate buffers and clear result.
External sorter container. Introduction to sorter container: see STXXL Sorter tutorial. Design and Internals of sorter container: see Sorter.
void sort(unsigned_type merger_memory_to_use)
Switch to output state, rewind() in case the output was already sorted.
void rewind()
Rewind output stream to beginning.
sorted_runs_data_type::size_type size_type
Forms sorted runs of data from a stream.
void push(const value_type &val)
Push another item (only callable during input state).
runs_merger_type::size_type size_type
size type
#define STXXL_BEGIN_NAMESPACE
choose_int_types< my_pointer_size >::unsigned_type unsigned_type
bool empty() const
Standard stream method.
void set_merger_memory_to_use(unsigned_type merger_memory_to_use)
Change runs_merger memory usage.
stream::runs_creator< stream::use_push< ValueType >, cmp_type, block_size, alloc_strategy_type > runs_creator_type
runs creator type with push() method
void sort()
Switch to output state, rewind() in case the output was already sorted.
sorter(const cmp_type &cmp, unsigned_type memory_to_use)
Constructor allocation memory_to_use bytes in ram for sorted runs.
size_type size() const
Number of items pushed or items remaining to be read.
#define STXXL_END_NAMESPACE
void sort_reuse()
Switch to output state, rewind() in case the output was already sorted.