334 |
static int |
static int |
335 |
compare_initial_runs (const void *a_, const void *b_, void *aux UNUSED) |
compare_initial_runs (const void *a_, const void *b_, void *aux UNUSED) |
336 |
{ |
{ |
337 |
const struct casefile *a = a_; |
struct casefile *const *a = a_; |
338 |
const struct casefile *b = b_; |
struct casefile *const *b = b_; |
339 |
unsigned long a_case_cnt = casefile_get_case_cnt (a); |
unsigned long a_case_cnt = casefile_get_case_cnt (*a); |
340 |
unsigned long b_case_cnt = casefile_get_case_cnt (b); |
unsigned long b_case_cnt = casefile_get_case_cnt (*b); |
341 |
|
|
342 |
return a_case_cnt > b_case_cnt ? -1 : a_case_cnt < b_case_cnt; |
return a_case_cnt > b_case_cnt ? -1 : a_case_cnt < b_case_cnt; |
343 |
} |
} |
753 |
compare_initial_runs, NULL); |
compare_initial_runs, NULL); |
754 |
dummy_run_cnt = mod (1 - (int) xsrt->run_cnt, max_order - 1); |
dummy_run_cnt = mod (1 - (int) xsrt->run_cnt, max_order - 1); |
755 |
|
|
756 |
assert( max_order > 0 ); |
assert (max_order > 0); |
757 |
assert (max_order <= 2 |
assert (max_order <= 2 |
758 |
|| (xsrt->run_cnt + dummy_run_cnt) % (max_order - 1) == 1); |
|| (xsrt->run_cnt + dummy_run_cnt) % (max_order - 1) == 1); |
759 |
while (xsrt->run_cnt > 1) |
while (xsrt->run_cnt > 1) |
832 |
|
|
833 |
for (i = 0; i < run_cnt; i++) |
for (i = 0; i < run_cnt; i++) |
834 |
{ |
{ |
835 |
input_readers[i] = casefile_get_reader (input_runs[i]); |
input_readers[i] = casefile_get_destructive_reader (input_runs[i]); |
836 |
if (!casereader_read_xfer (input_readers[i], &input_cases[i])) |
if (!casereader_read_xfer (input_readers[i], &input_cases[i])) |
837 |
{ |
{ |
838 |
run_cnt--; |
run_cnt--; |
856 |
min_idx = i; |
min_idx = i; |
857 |
|
|
858 |
/* Write minimum to output file. */ |
/* Write minimum to output file. */ |
859 |
casefile_append_xfer (output_casefile, &input_cases[i]); |
casefile_append_xfer (output_casefile, &input_cases[min_idx]); |
860 |
|
|
861 |
if (!casereader_read_xfer (input_readers[i], &input_cases[i])) |
if (!casereader_read_xfer (input_readers[min_idx], |
862 |
|
&input_cases[min_idx])) |
863 |
{ |
{ |
864 |
casereader_destroy (input_readers[i]); |
casereader_destroy (input_readers[min_idx]); |
865 |
casefile_destroy (input_runs[i]); |
casefile_destroy (input_runs[min_idx]); |
866 |
|
|
867 |
run_cnt--; |
run_cnt--; |
868 |
input_runs[i] = input_runs[run_cnt--]; |
input_runs[min_idx] = input_runs[run_cnt]; |
869 |
input_readers[i] = input_readers[run_cnt--]; |
input_readers[min_idx] = input_readers[run_cnt]; |
870 |
input_cases[i] = input_cases[run_cnt--]; |
input_cases[min_idx] = input_cases[run_cnt]; |
871 |
} |
} |
872 |
} |
} |
873 |
|
|