Constness and global namespace patrol.
[pspp-builds.git] / src / math / sort.c
index 01e955334c9480cccc47f385519367d490e41d5e..3f42c23d740346b6ac99ffa346e1a1194691401e 100644 (file)
@@ -30,6 +30,7 @@
 #include <data/case-source.h>
 #include <data/case.h>
 #include <data/casefile.h>
+#include <data/fastfile.h>
 #include <data/procedure.h>
 #include <data/settings.h>
 #include <data/variable.h>
@@ -37,6 +38,7 @@
 #include <language/expressions/public.h>
 #include <libpspp/alloc.h>
 #include <libpspp/array.h>
+#include <libpspp/assertion.h>
 #include <libpspp/message.h>
 #include <libpspp/message.h>
 #include <libpspp/misc.h>
@@ -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. */