#include <libpspp/misc.h>
#include <libpspp/str.h>
+#include "minmax.h"
+
#include "gettext.h"
#define _(msgid) gettext (msgid)
sort_to_casefile_callback (const struct casefile *cf, void *cb_data_)
{
struct sort_to_casefile_cb_data *cb_data = cb_data_;
- cb_data->output = sort_execute (casefile_get_reader (cf), cb_data->criteria);
+ cb_data->output = sort_execute (casefile_get_reader (cf, NULL), cb_data->criteria);
return cb_data->output != NULL;
}
unsigned long idx; /* Index to allow for stable sorting. */
};
-static int compare_indexed_cases (const void *, const void *, void *);
+static int compare_indexed_cases (const void *, const void *, const void *);
/* If the data is in memory, do an internal sort and return a new
casefile for the data. Otherwise, return a null pointer. */
at A and B, with a "last resort" comparison for stability, and
returns a strcmp()-type result. */
static int
-compare_indexed_cases (const void *a_, const void *b_, void *criteria_)
+compare_indexed_cases (const void *a_, const void *b_, const void *criteria_)
{
- struct sort_criteria *criteria = criteria_;
+ const struct sort_criteria *criteria = criteria_;
const struct indexed_case *a = a_;
const struct indexed_case *b = b_;
int result = compare_record (&a->c, &b->c, criteria);
};
static bool destroy_initial_run_state (struct initial_run_state *);
-static void process_case (struct initial_run_state *, const struct ccase *,
- size_t);
+static void process_case (struct initial_run_state *,
+ const struct ccase *, size_t);
static int allocate_cases (struct initial_run_state *);
static void output_record (struct initial_run_state *);
static void start_run (struct initial_run_state *);
static void end_run (struct initial_run_state *);
static int compare_record_run (const struct record_run *,
const struct record_run *,
- struct initial_run_state *);
-static int compare_record_run_minheap (const void *, const void *, void *);
+ const struct initial_run_state *);
+static int compare_record_run_minheap (const void *, const void *,
+ const void *);
/* Reads cases from READER and composes initial runs in XSRT. */
static int
/* Add a single case to an initial run. */
static void
-process_case (struct initial_run_state *irs, const struct ccase *c, size_t idx)
+process_case (struct initial_run_state *irs, const struct ccase *c,
+ size_t idx)
{
struct record_run *rr;
static int
compare_record_run (const struct record_run *a,
const struct record_run *b,
- struct initial_run_state *irs)
+ const struct initial_run_state *irs)
{
int result = a->run < b->run ? -1 : a->run > b->run;
if (result == 0)
on the current record according to SCP, but in descending
order. */
static int
-compare_record_run_minheap (const void *a, const void *b, void *irs)
+compare_record_run_minheap (const void *a, const void *b, const void *irs)
{
return -compare_record_run (a, b, irs);
}
{
while (xsrt->run_cnt > 1)
{
- int order = min (MAX_MERGE_ORDER, xsrt->run_cnt);
+ int order = MIN (MAX_MERGE_ORDER, xsrt->run_cnt);
int idx = choose_merge (xsrt->runs, xsrt->run_cnt, order);
xsrt->runs[idx] = merge_once (xsrt, xsrt->runs + idx, order);
remove_range (xsrt->runs, xsrt->run_cnt, sizeof *xsrt->runs,