36#ifndef AMI_SORT_IMPL_H
37#define AMI_SORT_IMPL_H
92template <
class T,
class Compare>
116template <
class T,
class Compare>
137 for (
unsigned int i = 0; i <
nblocks; i++) {
151 while (!
rheap.empty()) {
152 elt =
rheap.extract_min();
179template <
class T,
class Compare>
191 SDEBUG cout <<
"runFormation: ";
215 for (
size_t i = 0; i <
nb_runs; i++) {
254 SDEBUG cout <<
"runFormation: done.\n";
277template <
class T,
class Compare>
287 SDEBUG cout <<
"singleMerge: ";
298 <<
": OUT OF MEMORY in singleMerge (going over limit)" << endl;
307 SDEBUG cout <<
"arity=" << arity <<
" (max_arity=" <<
max_arity <<
")\n";
316 while (!
rheap.empty()) {
319 elt =
rheap.extract_min();
324 SDEBUG cout <<
"..done\n";
343template <
class T,
class Compare>
351 SDEBUG cout <<
"multiMerge: " <<
runList->length() <<
" runs" << endl;
353 while (
runList->length() > 1) {
AMI_STREAM< T > * singleMerge(queue< char * > *streamList, Compare *cmp)
size_t makeRun_Block(AMI_STREAM< T > *instream, T *data, unsigned int run_size, Compare *cmp)
void makeRun(AMI_STREAM< T > *instream, T *&data, int run_size, Compare *cmp)
AMI_STREAM< T > * multiMerge(queue< char * > *runList, Compare *cmp)
queue< char * > * runFormation(AMI_STREAM< T > *instream, Compare *cmp)
#define STREAM_BUFFER_SIZE
@ AMI_ERROR_END_OF_STREAM
static AMI_err main_memory_usage(size_t *usage, MM_stream_usage usage_type=MM_STREAM_USAGE_OVERHEAD)
AMI_err write_item(const T &elt)
AMI_err write_array(const T *data, off_t len)
AMI_err name(char **stream_name)
AMI_err read_array(T *data, off_t len, off_t *lenp=NULL)
AMI_err seek(off_t offset)
void persist(persistence p)
size_t memory_available()
#define assert(condition)
@ MM_STREAM_USAGE_MAXIMUM
void quicksort(T *data, size_t n, CMPR &cmp, size_t min_len=20)
SYMBOL * err(FILE *fp, SYMBOL *s, char *msg)