X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmath%2Fsort.c;h=3f42c23d740346b6ac99ffa346e1a1194691401e;hb=8297784ffdab47d35820735eb130a484ba9b6c01;hp=01e955334c9480cccc47f385519367d490e41d5e;hpb=321aff454c80b141d1d85fc1e3ea0c4eb05ab437;p=pspp-builds.git diff --git a/src/math/sort.c b/src/math/sort.c index 01e95533..3f42c23d 100644 --- a/src/math/sort.c +++ b/src/math/sort.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -37,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -61,27 +63,27 @@ static struct casefile *do_external_sort (struct casereader *, static void prepare_to_sort_active_file (void) { - proc_cancel_temporary_transformations (); + proc_cancel_temporary_transformations (current_dataset); } /* Sorts the active file in-place according to CRITERIA. - Returns nonzero if successful. */ -int + Returns true if successful. */ +bool sort_active_file_in_place (const struct sort_criteria *criteria) { struct casefile *in, *out; prepare_to_sort_active_file (); - if (!procedure (NULL, NULL)) - return 0; + if (!procedure (current_dataset,NULL, NULL)) + return false; - in = proc_capture_output (); + in = proc_capture_output (current_dataset); out = sort_execute (casefile_get_destructive_reader (in), criteria); if (out == NULL) - return 0; + return false; - proc_set_source (storage_source_create (out)); - return 1; + proc_set_source (current_dataset, storage_source_create (out)); + return true; } /* Data passed to sort_to_casefile_callback(). */ @@ -112,7 +114,7 @@ sort_active_file_to_casefile (const struct sort_criteria *criteria) cb_data.criteria = criteria; cb_data.output = NULL; - if (!multipass_procedure (sort_to_casefile_callback, &cb_data)) + if (!multipass_procedure (current_dataset,sort_to_casefile_callback, &cb_data)) { casefile_destroy (cb_data.output); return NULL; @@ -161,7 +163,7 @@ do_internal_sort (struct casereader *reader, return NULL; case_cnt = casefile_get_case_cnt (src); - dst = casefile_create (casefile_get_value_cnt (src)); + dst = fastfile_create (casefile_get_value_cnt (src)); if (case_cnt != 0) { struct indexed_case *cases = nmalloc (sizeof *cases, case_cnt); @@ -173,7 +175,7 @@ do_internal_sort (struct casereader *reader, { bool ok = casereader_read_xfer (reader, &cases[i].c); if (!ok) - abort (); + NOT_REACHED (); cases[i].idx = i; } @@ -183,7 +185,7 @@ do_internal_sort (struct casereader *reader, for (i = 0; i < case_cnt; i++) casefile_append_xfer (dst, &cases[i].c); if (casefile_error (dst)) - abort (); + NOT_REACHED (); free (cases); } @@ -507,7 +509,7 @@ start_run (struct initial_run_state *irs) { irs->run++; irs->case_cnt = 0; - irs->casefile = casefile_create (irs->xsrt->value_cnt); + irs->casefile = fastfile_create (irs->xsrt->value_cnt); casefile_to_disk (irs->casefile); case_nullify (&irs->last_output); } @@ -672,7 +674,7 @@ merge_once (struct external_sort *xsrt, } /* Create output file. */ - output = casefile_create (xsrt->value_cnt); + output = fastfile_create (xsrt->value_cnt); casefile_to_disk (output); /* Merge. */