53 #include <tpie/pipelining/merge_sorter.h>
54 #include <tpie/file_stream.h>
65 template<
typename Stream,
typename T,
typename Compare>
69 stream_size_type sz = instream.size();
83 while (instream.can_read()) s.
push(instream.read()), push.
step();
91 while (s.
can_pull()) instream.write(s.
pull()), output.step();
97 template<
typename Stream,
typename T,
typename Compare>
98 void generic_sort(Stream & instream, Stream & outstream, Compare comp,
101 if (&instream == &outstream) {
102 generic_sort<Stream, T, Compare>(instream, comp, indicator);
106 stream_size_type sz = instream.size();
108 fractional_progress fp(indicator);
109 fractional_subindicator push(fp,
"sort",
TPIE_FSI, sz,
"Write sorted runs");
110 fractional_subindicator merge(fp,
"sort",
TPIE_FSI, sz,
"Perform merge heap");
111 fractional_subindicator output(fp,
"sort",
TPIE_FSI, sz,
"Write sorted output");
116 merge_sorter<T, true, Compare> s(comp);
120 while (instream.can_read()) s.push(instream.read()), push.step();
126 outstream.truncate(0);
128 while (s.can_pull()) outstream.write(s.pull()), output.step();
140 template<
typename T,
typename Compare>
143 bits::generic_sort<uncompressed_stream<T>, T, Compare>(instream, outstream, &comp, &indicator);
153 sort(instream, outstream, comp, indicator);
163 bits::generic_sort<file_stream<T>, T>(instream, outstream, comp, indicator);
178 template<
typename T,
typename Compare>
181 sort(instream, instream, comp, &indicator);
188 template<
typename T,
typename Compare>
191 bits::generic_sort<file_stream<T>, T>(instream, comp, &indicator);
200 sort(instream, instream, &indicator);
204 void sort(file_stream<T> &instream,
205 progress_indicator_base &indicator) {
207 sort(instream, comp, indicator);
214 template <
typename T>
216 sort(instream, instream);
223 #endif // _AMI_SORT_H