#include "casefile.h"
#include "command.h"
#include "error.h"
-#include "expr.h"
+#include "expressions/public.h"
#include "lexer.h"
#include "misc.h"
#include "settings.h"
static int
compare_initial_runs (const void *a_, const void *b_, void *aux UNUSED)
{
- const struct casefile *a = a_;
- const struct casefile *b = b_;
- unsigned long a_case_cnt = casefile_get_case_cnt (a);
- unsigned long b_case_cnt = casefile_get_case_cnt (b);
+ struct casefile *const *a = a_;
+ struct casefile *const *b = b_;
+ unsigned long a_case_cnt = casefile_get_case_cnt (*a);
+ unsigned long b_case_cnt = casefile_get_case_cnt (*b);
return a_case_cnt > b_case_cnt ? -1 : a_case_cnt < b_case_cnt;
}
make_heap (xsrt->initial_runs, xsrt->run_cnt, sizeof *xsrt->initial_runs,
compare_initial_runs, NULL);
dummy_run_cnt = mod (1 - (int) xsrt->run_cnt, max_order - 1);
- assert (max_order == 1
+
+ assert (max_order > 0);
+ assert (max_order <= 2
|| (xsrt->run_cnt + dummy_run_cnt) % (max_order - 1) == 1);
while (xsrt->run_cnt > 1)
{
for (i = 0; i < run_cnt; i++)
{
- input_readers[i] = casefile_get_reader (input_runs[i]);
+ input_readers[i] = casefile_get_destructive_reader (input_runs[i]);
if (!casereader_read_xfer (input_readers[i], &input_cases[i]))
{
run_cnt--;
min_idx = i;
/* Write minimum to output file. */
- casefile_append_xfer (output_casefile, &input_cases[i]);
+ casefile_append_xfer (output_casefile, &input_cases[min_idx]);
- if (!casereader_read_xfer (input_readers[i], &input_cases[i]))
+ if (!casereader_read_xfer (input_readers[min_idx],
+ &input_cases[min_idx]))
{
- casereader_destroy (input_readers[i]);
- casefile_destroy (input_runs[i]);
+ casereader_destroy (input_readers[min_idx]);
+ casefile_destroy (input_runs[min_idx]);
run_cnt--;
- input_runs[i] = input_runs[run_cnt--];
- input_readers[i] = input_readers[run_cnt--];
- input_cases[i] = input_cases[run_cnt--];
+ input_runs[min_idx] = input_runs[run_cnt];
+ input_readers[min_idx] = input_readers[run_cnt];
+ input_cases[min_idx] = input_cases[run_cnt];
}
}