Get rid of `char *c' member in union value, for cleanliness.
[pspp-builds.git] / src / language / stats / aggregate.c
index e51a5a6a13724cea3a1a85357a46ffbc6e895c8a..cd3011704af03a73ce79179f4ab998a47c09f66f 100644 (file)
@@ -27,7 +27,7 @@
 #include <data/casefile.h>
 #include <data/dictionary.h>
 #include <data/file-handle-def.h>
-#include <procedure.h>
+#include <data/procedure.h>
 #include <data/settings.h>
 #include <data/storage-stream.h>
 #include <data/sys-file-writer.h>
 #include <libpspp/str.h>
 #include <math/moments.h>
 #include <math/sort.h>
-#include <procedure.h>
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
+/* Argument for AGGREGATE function. */
+union agr_argument
+  {
+    double f;                           /* Numeric. */
+    char *c;                            /* Short or long string. */
+  };
+
 /* Specifies how to make an aggregate variable. */
 struct agr_var
   {
@@ -59,7 +65,7 @@ struct agr_var
     struct variable *dest;     /* Target variable. */
     int function;              /* Function. */
     int include_missing;       /* 1=Include user-missing values. */
-    union value arg[2];                /* Arguments. */
+    union agr_argument arg[2]; /* Arguments. */
 
     /* Accumulated during AGGREGATE execution. */
     double dbl[3];
@@ -155,10 +161,10 @@ static int aggregate_single_case (struct agr_proc *agr,
 static void dump_aggregate_info (struct agr_proc *agr, struct ccase *output);
 
 /* Aggregating to the active file. */
-static bool agr_to_active_file (struct ccase *, void *aux);
+static bool agr_to_active_file (const struct ccase *, void *aux);
 
 /* Aggregating to a system file. */
-static bool presorted_agr_to_sysfile (struct ccase *, void *aux);
+static bool presorted_agr_to_sysfile (const struct ccase *, void *aux);
 \f
 /* Parsing. */
 
@@ -360,7 +366,7 @@ parse_aggregate_functions (struct agr_proc *agr)
       const struct agr_func *function;
       int func_index;
 
-      union value arg[2];
+      union agr_argument arg[2];
 
       struct variable **src;
       size_t n_src;
@@ -516,7 +522,7 @@ parse_aggregate_functions (struct agr_proc *agr)
                   || (src[0]->type == ALPHA
                       && str_compare_rpad (arg[0].c, arg[1].c) > 0)))
             {
-              union value t = arg[0];
+              union agr_argument t = arg[0];
               arg[0] = arg[1];
               arg[1] = t;
                   
@@ -1075,7 +1081,7 @@ initialize_aggregate_info (struct agr_proc *agr, const struct ccase *input)
    are dropped.
    Returns true if successful, false if an I/O error occurred. */
 static bool
-agr_to_active_file (struct ccase *c, void *agr_)
+agr_to_active_file (const struct ccase *c, void *agr_)
 {
   struct agr_proc *agr = agr_;
 
@@ -1088,7 +1094,7 @@ agr_to_active_file (struct ccase *c, void *agr_)
 /* Aggregate the current case and output it if we passed a
    breakpoint. */
 static bool
-presorted_agr_to_sysfile (struct ccase *c, void *agr_) 
+presorted_agr_to_sysfile (const struct ccase *c, void *agr_) 
 {
   struct agr_proc *agr = agr_;