X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ffrequencies.q;h=66faf5ef027e2608914a0a9b2927bedbe5831ee7;hb=77cbf2d7d1e5712d4ef952f265ed5c2917fc3f68;hp=a9c5850d7ba29f6f3031b0dea7146629443e97a3;hpb=027eba771a7ef9d25e97f0026d6469ea34c06523;p=pspp diff --git a/src/frequencies.q b/src/frequencies.q index a9c5850d7b..66faf5ef02 100644 --- a/src/frequencies.q +++ b/src/frequencies.q @@ -160,9 +160,9 @@ static struct pool *gen_pool; /* General mode. */ static void determine_charts (void); -static void precalc (void); -static int calc (struct ccase *); -static void postcalc (void); +static void precalc (void *); +static int calc (struct ccase *, void *); +static void postcalc (void *); static void postprocess_freq_tab (struct variable *); static void dump_full (struct variable *); @@ -246,7 +246,7 @@ internal_cmd_frequencies (void) cmd.sort = FRQ_AVALUE; /* Do it! */ - procedure (precalc, calc, postcalc); + procedure (precalc, calc, postcalc, NULL); return CMD_SUCCESS; } @@ -355,7 +355,7 @@ determine_charts (void) /* Add data from case C to the frequency table. */ static int -calc (struct ccase *c) +calc (struct ccase *c, void *aux UNUSED) { double weight; int i; @@ -408,7 +408,7 @@ calc (struct ccase *c) /* Prepares each variable that is the target of FREQUENCIES by setting up its hash table. */ static void -precalc (void) +precalc (void *aux UNUSED) { int i; @@ -451,7 +451,7 @@ precalc (void) /* Finishes up with the variables after frequencies have been calculated. Displays statistics, percentiles, ... */ static void -postcalc (void) +postcalc (void *aux UNUSED) { int i; @@ -518,6 +518,8 @@ get_freq_comparator (int frq_sort, int var_type) return 0; } +/* Returns nonzero iff the value in struct freq F is non-missing + for variable V. */ static int not_missing (const void *f_, void *v_) { @@ -527,8 +529,9 @@ not_missing (const void *f_, void *v_) return !is_missing (&f->v, v); } +/* Summarizes the frequency table data for variable V. */ static void -postprocess_freq_tab (struct variable * v) +postprocess_freq_tab (struct variable *v) { hsh_compare_func *compare; struct freq_tab *ft; @@ -575,20 +578,22 @@ postprocess_freq_tab (struct variable * v) } } +/* Frees the frequency table for variable V. */ static void cleanup_freq_tab (struct variable *v) { assert (v->p.frq.tab.mode == FRQM_GENERAL); free (v->p.frq.tab.valid); + hsh_destroy (v->p.frq.tab.data); } /* Parses the VARIABLES subcommand, adding to {n_variables,v_variables}. */ static int -frq_custom_variables (struct cmd_frequencies *cmd unused) +frq_custom_variables (struct cmd_frequencies *cmd UNUSED) { int mode; - int min, max; + int min = 0, max = 0; int old_n_variables = n_variables; int i; @@ -671,7 +676,7 @@ frq_custom_variables (struct cmd_frequencies *cmd unused) /* Parses the GROUPED subcommand, setting the frq.{n_grouped,grouped} fields of specified variables. */ static int -frq_custom_grouped (struct cmd_frequencies *cmd unused) +frq_custom_grouped (struct cmd_frequencies *cmd UNUSED) { lex_match ('='); if ((token == T_ID && dict_lookup_var (default_dict, tokid) != NULL) @@ -715,8 +720,11 @@ frq_custom_grouped (struct cmd_frequencies *cmd unused) return 0; } } - else - nl = 0; + else + { + nl = 0; + dl = NULL; + } for (i = 0; i < n; i++) { @@ -779,7 +787,7 @@ add_percentile (double x) /* Parses the PERCENTILES subcommand, adding user-specified percentiles to the list. */ static int -frq_custom_percentiles (struct cmd_frequencies *cmd unused) +frq_custom_percentiles (struct cmd_frequencies *cmd UNUSED) { lex_match ('='); if (token != T_NUM) @@ -808,7 +816,7 @@ frq_custom_percentiles (struct cmd_frequencies *cmd unused) /* Parses the NTILES subcommand, adding the percentiles that correspond to the specified evenly-distributed ntiles. */ static int -frq_custom_ntiles (struct cmd_frequencies *cmd unused) +frq_custom_ntiles (struct cmd_frequencies *cmd UNUSED) { int i; @@ -825,7 +833,7 @@ frq_custom_ntiles (struct cmd_frequencies *cmd unused) /* Hash of numeric values. */ static unsigned -hash_value_numeric (const void *value_, void *foo unused) +hash_value_numeric (const void *value_, void *foo UNUSED) { const struct freq *value = value_; return hsh_hash_double (value->v.f); @@ -833,18 +841,17 @@ hash_value_numeric (const void *value_, void *foo unused) /* Hash of string values. */ static unsigned -hash_value_alpha (const void *value_, void *len_ unused) +hash_value_alpha (const void *value_, void *v_) { const struct freq *value = value_; + struct variable *v = v_; - static int len = MAX_SHORT_STRING; - - return hsh_hash_bytes (value->v.s, len); + return hsh_hash_bytes (value->v.s, v->width); } /* 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_, void *foo UNUSED) { const struct freq *a = a_; const struct freq *b = b_; @@ -870,7 +877,7 @@ 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, void *foo UNUSED) { return -compare_value_numeric_a (a, b, foo); } @@ -885,14 +892,14 @@ 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_, void *foo UNUSED) { const struct freq *a = a_; const struct freq *b = b_; - if (a->v.c > b->v.c) + if (a->c > b->c) return 1; - else if (a->v.c < b->v.c) + else if (a->c < b->c) return -1; if (a->v.f > b->v.f) @@ -912,9 +919,9 @@ compare_freq_alpha_a (const void *a_, const void *b_, void *v_) const struct freq *b = b_; const struct variable *v = v_; - if (a->v.c > b->v.c) + if (a->c > b->c) return 1; - else if (a->v.c < b->v.c) + else if (a->c < b->c) return -1; else return memcmp (a->v.s, b->v.s, v->width); @@ -923,14 +930,14 @@ 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_, void *foo UNUSED) { const struct freq *a = a_; const struct freq *b = b_; - if (a->v.c > b->v.c) + if (a->c > b->c) return -1; - else if (a->v.c < b->v.c) + else if (a->c < b->c) return 1; if (a->v.f > b->v.f) @@ -950,9 +957,9 @@ compare_freq_alpha_d (const void *a_, const void *b_, void *v_) const struct freq *b = b_; const struct variable *v = v_; - if (a->v.c > b->v.c) + if (a->c > b->c) return -1; - else if (a->v.c < b->v.c) + else if (a->c < b->c) return 1; else return memcmp (a->v.s, b->v.s, v->width);