X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Ffrequencies.q;h=0c0dc63b3d32148f86adfc663c69779accc4414a;hb=3c5121dc68726f596565894f831e4fa311c99c64;hp=d78f37a7459ec726fc14d2312d4d767abd82e2dd;hpb=8eac4df36306cd357bba29ffbfaddc537fc0be47;p=pspp diff --git a/src/language/stats/frequencies.q b/src/language/stats/frequencies.q index d78f37a745..0c0dc63b3d 100644 --- a/src/language/stats/frequencies.q +++ b/src/language/stats/frequencies.q @@ -267,7 +267,7 @@ struct var_freqs }; static inline struct var_freqs * -get_var_freqs (struct variable *v) +get_var_freqs (const struct variable *v) { assert (v != NULL); assert (v->aux != NULL); @@ -278,9 +278,9 @@ static void determine_charts (void); static void calc_stats (struct variable *v, double d[frq_n_stats]); -static void precalc (const struct ccase *, void *); -static bool calc (const struct ccase *, void *); -static void postcalc (void *); +static void precalc (const struct ccase *, void *, const struct dataset *); +static bool calc (const struct ccase *, void *, const struct dataset *); +static bool postcalc (void *, const struct dataset *); static void postprocess_freq_tab (struct variable *); static void dump_full (struct variable *); @@ -305,15 +305,15 @@ freq_tab_to_hist(const struct freq_tab *ft, const struct variable *var); /* Parser and outline. */ -static int internal_cmd_frequencies (void); +static int internal_cmd_frequencies (struct dataset *ds); int -cmd_frequencies (void) +cmd_frequencies (struct dataset *ds) { int result; int_pool = pool_create (); - result = internal_cmd_frequencies (); + result = internal_cmd_frequencies (ds); pool_destroy (int_pool); int_pool=0; pool_destroy (gen_pool); @@ -324,7 +324,7 @@ cmd_frequencies (void) } static int -internal_cmd_frequencies (void) +internal_cmd_frequencies (struct dataset *ds) { int i; bool ok; @@ -335,7 +335,7 @@ internal_cmd_frequencies (void) n_variables = 0; v_variables = NULL; - if (!parse_frequencies (&cmd, NULL)) + if (!parse_frequencies (ds, &cmd, NULL)) return CMD_FAILURE; if (cmd.onepage_limit == NOT_LONG) @@ -391,7 +391,7 @@ internal_cmd_frequencies (void) /* Do it! */ - ok = procedure_with_splits (current_dataset, precalc, calc, postcalc, NULL); + ok = procedure_with_splits (ds, precalc, calc, postcalc, NULL); free_frequencies(&cmd); @@ -505,17 +505,17 @@ determine_charts (void) /* Add data from case C to the frequency table. */ static bool -calc (const struct ccase *c, void *aux UNUSED) +calc (const struct ccase *c, void *aux UNUSED, const struct dataset *ds) { double weight; size_t i; bool bad_warn = true; - weight = dict_get_case_weight (dataset_dict (current_dataset), c, &bad_warn); + weight = dict_get_case_weight (dataset_dict (ds), c, &bad_warn); for (i = 0; i < n_variables; i++) { - struct variable *v = v_variables[i]; + const struct variable *v = v_variables[i]; const union value *val = case_data (c, v->fv); struct var_freqs *vf = get_var_freqs (v); struct freq_tab *ft = &vf->tab; @@ -566,11 +566,11 @@ calc (const struct ccase *c, void *aux UNUSED) /* Prepares each variable that is the target of FREQUENCIES by setting up its hash table. */ static void -precalc (const struct ccase *first, void *aux UNUSED) +precalc (const struct ccase *first, void *aux UNUSED, const struct dataset *ds) { size_t i; - output_split_file_values (first); + output_split_file_values (ds, first); pool_destroy (gen_pool); gen_pool = pool_create (); @@ -611,8 +611,8 @@ precalc (const struct ccase *first, void *aux UNUSED) /* Finishes up with the variables after frequencies have been calculated. Displays statistics, percentiles, ... */ -static void -postcalc (void *aux UNUSED) +static bool +postcalc (void *aux UNUSED, const struct dataset *ds UNUSED) { size_t i; @@ -687,6 +687,8 @@ postcalc (void *aux UNUSED) cleanup_freq_tab (v); } + + return true; } /* Returns the comparison function that should be used for @@ -715,10 +717,10 @@ get_freq_comparator (int frq_sort, int var_type) /* Returns true iff the value in struct freq F is non-missing for variable V. */ static bool -not_missing (const void *f_, void *v_) +not_missing (const void *f_, const void *v_) { const struct freq *f = f_; - struct variable *v = v_; + const struct variable *v = v_; return !mv_is_value_missing (&v->miss, f->v); } @@ -791,7 +793,7 @@ cleanup_freq_tab (struct variable *v) /* Parses the VARIABLES subcommand, adding to {n_variables,v_variables}. */ static int -frq_custom_variables (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) +frq_custom_variables (struct dataset *ds, struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) { int mode; int min = 0, max = 0; @@ -801,10 +803,10 @@ frq_custom_variables (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) lex_match ('='); if (token != T_ALL && (token != T_ID - || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL)) + || dict_lookup_var (dataset_dict (ds), tokid) == NULL)) return 2; - if (!parse_variables (dataset_dict (current_dataset), &v_variables, &n_variables, + if (!parse_variables (dataset_dict (ds), &v_variables, &n_variables, PV_APPEND | PV_NO_SCRATCH)) return 0; @@ -879,10 +881,10 @@ frq_custom_variables (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) /* Parses the GROUPED subcommand, setting the n_grouped, grouped fields of specified variables. */ static int -frq_custom_grouped (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) +frq_custom_grouped (struct dataset *ds, struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) { lex_match ('='); - if ((token == T_ID && dict_lookup_var (dataset_dict (current_dataset), tokid) != NULL) + if ((token == T_ID && dict_lookup_var (dataset_dict (ds), tokid) != NULL) || token == T_ID) for (;;) { @@ -896,7 +898,7 @@ frq_custom_grouped (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) size_t n; struct variable **v; - if (!parse_variables (dataset_dict (current_dataset), &v, &n, + if (!parse_variables (dataset_dict (ds), &v, &n, PV_NO_DUPLICATE | PV_NUMERIC)) return 0; if (lex_match ('(')) @@ -949,7 +951,7 @@ frq_custom_grouped (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) free (v); if (!lex_match ('/')) break; - if ((token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) != NULL) + if ((token != T_ID || dict_lookup_var (dataset_dict (ds), tokid) != NULL) && token != T_ALL) { lex_put_back ('/'); @@ -995,7 +997,7 @@ add_percentile (double x) /* Hash of numeric values. */ static unsigned -hash_value_numeric (const void *value_, void *foo UNUSED) +hash_value_numeric (const void *value_, const void *aux UNUSED) { const struct freq *value = value_; return hsh_hash_double (value->v[0].f); @@ -1003,10 +1005,10 @@ hash_value_numeric (const void *value_, void *foo UNUSED) /* Hash of string values. */ static unsigned -hash_value_alpha (const void *value_, void *v_) +hash_value_alpha (const void *value_, const void *v_) { const struct freq *value = value_; - struct variable *v = v_; + const struct variable *v = v_; struct var_freqs *vf = get_var_freqs (v); return hsh_hash_bytes (value->v[0].s, vf->width); @@ -1014,7 +1016,7 @@ hash_value_alpha (const void *value_, void *v_) /* Ascending numeric compare of values. */ static int -compare_value_numeric_a (const void *a_, const void *b_, void *foo UNUSED) +compare_value_numeric_a (const void *a_, const void *b_, const void *aux UNUSED) { const struct freq *a = a_; const struct freq *b = b_; @@ -1029,11 +1031,11 @@ compare_value_numeric_a (const void *a_, const void *b_, void *foo UNUSED) /* Ascending string compare of values. */ static int -compare_value_alpha_a (const void *a_, const void *b_, void *v_) +compare_value_alpha_a (const void *a_, const void *b_, const void *v_) { const struct freq *a = a_; const struct freq *b = b_; - struct variable *v = v_; + const struct variable *v = v_; struct var_freqs *vf = get_var_freqs (v); return memcmp (a->v[0].s, b->v[0].s, vf->width); @@ -1041,14 +1043,14 @@ compare_value_alpha_a (const void *a_, const void *b_, void *v_) /* Descending numeric compare of values. */ static int -compare_value_numeric_d (const void *a, const void *b, void *foo UNUSED) +compare_value_numeric_d (const void *a, const void *b, const void *aux UNUSED) { - return -compare_value_numeric_a (a, b, foo); + return -compare_value_numeric_a (a, b, aux); } /* Descending string compare of values. */ static int -compare_value_alpha_d (const void *a, const void *b, void *v) +compare_value_alpha_d (const void *a, const void *b, const void *v) { return -compare_value_alpha_a (a, b, v); } @@ -1056,7 +1058,7 @@ compare_value_alpha_d (const void *a, const void *b, void *v) /* Ascending numeric compare of frequency; secondary key on ascending numeric value. */ static int -compare_freq_numeric_a (const void *a_, const void *b_, void *foo UNUSED) +compare_freq_numeric_a (const void *a_, const void *b_, const void *aux UNUSED) { const struct freq *a = a_; const struct freq *b = b_; @@ -1077,11 +1079,11 @@ compare_freq_numeric_a (const void *a_, const void *b_, void *foo UNUSED) /* Ascending numeric compare of frequency; secondary key on ascending string value. */ static int -compare_freq_alpha_a (const void *a_, const void *b_, void *v_) +compare_freq_alpha_a (const void *a_, const void *b_, const void *v_) { const struct freq *a = a_; const struct freq *b = b_; - struct variable *v = v_; + const struct variable *v = v_; struct var_freqs *vf = get_var_freqs (v); if (a->c > b->c) @@ -1095,7 +1097,7 @@ compare_freq_alpha_a (const void *a_, const void *b_, void *v_) /* Descending numeric compare of frequency; secondary key on ascending numeric value. */ static int -compare_freq_numeric_d (const void *a_, const void *b_, void *foo UNUSED) +compare_freq_numeric_d (const void *a_, const void *b_, const void *aux UNUSED) { const struct freq *a = a_; const struct freq *b = b_; @@ -1116,11 +1118,11 @@ compare_freq_numeric_d (const void *a_, const void *b_, void *foo UNUSED) /* Descending numeric compare of frequency; secondary key on ascending string value. */ static int -compare_freq_alpha_d (const void *a_, const void *b_, void *v_) +compare_freq_alpha_d (const void *a_, const void *b_, const void *v_) { const struct freq *a = a_; const struct freq *b = b_; - struct variable *v = v_; + const struct variable *v = v_; struct var_freqs *vf = get_var_freqs (v); if (a->c > b->c)