X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Faggregate.c;h=cd3011704af03a73ce79179f4ab998a47c09f66f;hb=eca977e618f2d4c6d55d9851b9714fd60e55559b;hp=0485ccaecad5d65f38b825be3bf96dec5d93c91a;hpb=dcf9b154cbcaa35c3d8459a201b77eec8bcb30bd;p=pspp-builds.git diff --git a/src/language/stats/aggregate.c b/src/language/stats/aggregate.c index 0485ccae..cd301170 100644 --- a/src/language/stats/aggregate.c +++ b/src/language/stats/aggregate.c @@ -18,30 +18,43 @@ 02110-1301, USA. */ #include -#include "message.h" + #include -#include "alloc.h" -#include "any-writer.h" -#include "case.h" -#include "casefile.h" -#include "command.h" -#include "dictionary.h" -#include "message.h" -#include "file-handle-def.h" -#include "lexer.h" -#include "misc.h" -#include "moments.h" -#include "pool.h" -#include "settings.h" -#include "sys-file-writer.h" -#include "sort.h" -#include "str.h" -#include "variable.h" -#include "procedure.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #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 { @@ -52,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]; @@ -148,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); /* Parsing. */ @@ -254,7 +267,7 @@ cmd_aggregate (void) { /* The active file will be replaced by the aggregated data, so TEMPORARY is moot. */ - cancel_temporary (); + proc_cancel_temporary_transformations (); if (agr.sort != NULL && !presorted) { @@ -265,7 +278,7 @@ cmd_aggregate (void) agr.sink = create_case_sink (&storage_sink_class, agr.dict, NULL); if (agr.sink->class->open != NULL) agr.sink->class->open (agr.sink); - vfm_sink = create_case_sink (&null_sink_class, default_dict, NULL); + proc_set_sink (create_case_sink (&null_sink_class, default_dict, NULL)); if (!procedure (agr_to_active_file, &agr)) goto error; if (agr.case_cnt > 0) @@ -274,10 +287,10 @@ cmd_aggregate (void) if (!agr.sink->class->write (agr.sink, &agr.agr_case)) goto error; } - dict_destroy (default_dict); + discard_variables (); default_dict = agr.dict; agr.dict = NULL; - vfm_source = agr.sink->class->make_source (agr.sink); + proc_set_source (agr.sink->class->make_source (agr.sink)); free_case_sink (agr.sink); } else @@ -353,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; @@ -509,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; @@ -589,7 +602,6 @@ parse_aggregate_functions (struct agr_proc *agr) } free (dest[i]); - destvar->init = 0; if (dest_label[i]) { destvar->label = dest_label[i]; @@ -1069,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_; @@ -1082,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_;