X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Ffrequencies.q;h=8256f3d8a450f3261ab741cfc0d4417475fd1a85;hb=888d0f91d57e0c3c5a4206c30ac71eb87bf44227;hp=158fd4298c8f63bbedd88a93391f95c8f2bb7260;hpb=244ade48f9c233532cc535d3233fdef53bf9266b;p=pspp-builds.git diff --git a/src/language/stats/frequencies.q b/src/language/stats/frequencies.q index 158fd429..8256f3d8 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); @@ -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 (struct dataset *ds); +static int internal_cmd_frequencies (struct lexer *lexer, struct dataset *ds); int -cmd_frequencies (struct dataset *ds) +cmd_frequencies (struct lexer *lexer, struct dataset *ds) { int result; int_pool = pool_create (); - result = internal_cmd_frequencies (ds); + result = internal_cmd_frequencies (lexer, ds); pool_destroy (int_pool); int_pool=0; pool_destroy (gen_pool); @@ -324,7 +324,7 @@ cmd_frequencies (struct dataset *ds) } static int -internal_cmd_frequencies (struct dataset *ds) +internal_cmd_frequencies (struct lexer *lexer, struct dataset *ds) { int i; bool ok; @@ -335,7 +335,7 @@ internal_cmd_frequencies (struct dataset *ds) n_variables = 0; v_variables = NULL; - if (!parse_frequencies (ds, &cmd, NULL)) + if (!parse_frequencies (lexer, ds, &cmd, NULL)) return CMD_FAILURE; if (cmd.onepage_limit == NOT_LONG) @@ -376,7 +376,7 @@ internal_cmd_frequencies (struct dataset *ds) int pl; subc_list_double *ptl_list = &cmd.dl_percentiles[i]; for ( pl = 0 ; pl < subc_list_double_count(ptl_list); ++pl) - add_percentile(subc_list_double_at(ptl_list,pl) / 100.0 ); + add_percentile (subc_list_double_at(ptl_list, pl) / 100.0 ); } } if ( cmd.sbc_ntiles ) @@ -385,7 +385,7 @@ internal_cmd_frequencies (struct dataset *ds) { int j; for (j = 0; j <= cmd.n_ntiles[i]; ++j ) - add_percentile(j / (double) cmd.n_ntiles[i]); + add_percentile (j / (double) cmd.n_ntiles[i]); } } @@ -515,7 +515,7 @@ calc (const struct ccase *c, void *aux UNUSED, const struct dataset *ds) 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; @@ -585,7 +585,7 @@ precalc (const struct ccase *first, void *aux UNUSED, const struct dataset *ds) hsh_hash_func *hash; hsh_compare_func *compare; - if (v->type == NUMERIC) + if (var_is_numeric (v)) { hash = hash_value_numeric; compare = compare_value_numeric_a; @@ -665,7 +665,7 @@ postcalc (void *aux UNUSED, const struct dataset *ds UNUSED) norm.N = vf->tab.valid_cases; - calc_stats(v,d); + calc_stats (v, d); norm.mean = d[frq_mean]; norm.stddev = d[frq_stddev]; @@ -717,12 +717,12 @@ 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); + return !var_is_value_missing (v, f->v); } /* Summarizes the frequency table data for variable V. */ @@ -738,7 +738,7 @@ postprocess_freq_tab (struct variable *v) ft = &get_var_freqs (v)->tab; assert (ft->mode == FRQM_GENERAL); - compare = get_freq_comparator (cmd.sort, v->type); + compare = get_freq_comparator (cmd.sort, var_get_type (v)); /* Extract data from hash table. */ count = hsh_count (ft->data); @@ -793,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 dataset *ds, struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) +frq_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) { int mode; int min = 0, max = 0; @@ -801,31 +801,31 @@ frq_custom_variables (struct dataset *ds, struct cmd_frequencies *cmd UNUSED, vo size_t old_n_variables = n_variables; size_t i; - lex_match ('='); - if (token != T_ALL && (token != T_ID - || dict_lookup_var (dataset_dict (ds), tokid) == NULL)) + lex_match (lexer, '='); + if (lex_token (lexer) != T_ALL && (lex_token (lexer) != T_ID + || dict_lookup_var (dataset_dict (ds), lex_tokid (lexer)) == NULL)) return 2; - if (!parse_variables (dataset_dict (ds), &v_variables, &n_variables, + if (!parse_variables (lexer, dataset_dict (ds), &v_variables, &n_variables, PV_APPEND | PV_NO_SCRATCH)) return 0; - if (!lex_match ('(')) + if (!lex_match (lexer, '(')) mode = FRQM_GENERAL; else { mode = FRQM_INTEGER; - if (!lex_force_int ()) + if (!lex_force_int (lexer)) return 0; - min = lex_integer (); - lex_get (); - if (!lex_force_match (',')) + min = lex_integer (lexer); + lex_get (lexer); + if (!lex_force_match (lexer, ',')) return 0; - if (!lex_force_int ()) + if (!lex_force_int (lexer)) return 0; - max = lex_integer (); - lex_get (); - if (!lex_force_match (')')) + max = lex_integer (lexer); + lex_get (lexer); + if (!lex_force_match (lexer, ')')) return 0; if (max < min) { @@ -843,13 +843,13 @@ frq_custom_variables (struct dataset *ds, struct cmd_frequencies *cmd UNUSED, vo if (v->aux != NULL) { msg (SE, _("Variable %s specified multiple times on VARIABLES " - "subcommand."), v->name); + "subcommand."), var_get_name (v)); return 0; } - if (mode == FRQM_INTEGER && v->type != NUMERIC) + if (mode == FRQM_INTEGER && !var_is_numeric (v)) { msg (SE, _("Integer mode specified, but %s is not a numeric " - "variable."), v->name); + "variable."), var_get_name (v)); return 0; } @@ -867,12 +867,13 @@ frq_custom_variables (struct dataset *ds, struct cmd_frequencies *cmd UNUSED, vo vf->tab.vector = NULL; vf->n_groups = 0; vf->groups = NULL; - vf->width = v->width; - vf->print = v->print; + vf->width = var_get_width (v); + vf->print = *var_get_print_format (v); if (vf->width > MAX_SHORT_STRING && get_algorithm () == COMPATIBLE) { + enum fmt_type type = var_get_print_format (v)->type; vf->width = MAX_SHORT_STRING; - vf->print.w = MAX_SHORT_STRING * (v->print.type == FMT_AHEX ? 2 : 1); + vf->print.w = MAX_SHORT_STRING * (type == FMT_AHEX ? 2 : 1); } } return 1; @@ -881,11 +882,11 @@ frq_custom_variables (struct dataset *ds, struct cmd_frequencies *cmd UNUSED, vo /* Parses the GROUPED subcommand, setting the n_grouped, grouped fields of specified variables. */ static int -frq_custom_grouped (struct dataset *ds, struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) +frq_custom_grouped (struct lexer *lexer, struct dataset *ds, struct cmd_frequencies *cmd UNUSED, void *aux UNUSED) { - lex_match ('='); - if ((token == T_ID && dict_lookup_var (dataset_dict (ds), tokid) != NULL) - || token == T_ID) + lex_match (lexer, '='); + if ((lex_token (lexer) == T_ID && dict_lookup_var (dataset_dict (ds), lex_tokid (lexer)) != NULL) + || lex_token (lexer) == T_ID) for (;;) { size_t i; @@ -898,27 +899,27 @@ frq_custom_grouped (struct dataset *ds, struct cmd_frequencies *cmd UNUSED, void size_t n; struct variable **v; - if (!parse_variables (dataset_dict (ds), &v, &n, + if (!parse_variables (lexer, dataset_dict (ds), &v, &n, PV_NO_DUPLICATE | PV_NUMERIC)) return 0; - if (lex_match ('(')) + if (lex_match (lexer, '(')) { nl = ml = 0; dl = NULL; - while (lex_integer ()) + while (lex_integer (lexer)) { if (nl >= ml) { ml += 16; dl = pool_nrealloc (int_pool, dl, ml, sizeof *dl); } - dl[nl++] = tokval; - lex_get (); - lex_match (','); + dl[nl++] = lex_tokval (lexer); + lex_get (lexer); + lex_match (lexer, ','); } /* Note that nl might still be 0 and dl might still be NULL. That's okay. */ - if (!lex_match (')')) + if (!lex_match (lexer, ')')) { free (v); msg (SE, _("`)' expected after GROUPED interval list.")); @@ -934,14 +935,14 @@ frq_custom_grouped (struct dataset *ds, struct cmd_frequencies *cmd UNUSED, void for (i = 0; i < n; i++) if (v[i]->aux == NULL) msg (SE, _("Variables %s specified on GROUPED but not on " - "VARIABLES."), v[i]->name); + "VARIABLES."), var_get_name (v[i])); else { struct var_freqs *vf = get_var_freqs (v[i]); if (vf->groups != NULL) msg (SE, _("Variables %s specified multiple times on GROUPED " - "subcommand."), v[i]->name); + "subcommand."), var_get_name (v[i])); else { vf->n_groups = nl; @@ -949,12 +950,12 @@ frq_custom_grouped (struct dataset *ds, struct cmd_frequencies *cmd UNUSED, void } } free (v); - if (!lex_match ('/')) + if (!lex_match (lexer, '/')) break; - if ((token != T_ID || dict_lookup_var (dataset_dict (ds), tokid) != NULL) - && token != T_ALL) + if ((lex_token (lexer) != T_ID || dict_lookup_var (dataset_dict (ds), lex_tokid (lexer)) != NULL) + && lex_token (lexer) != T_ALL) { - lex_put_back ('/'); + lex_put_back (lexer, '/'); break; } } @@ -979,7 +980,7 @@ add_percentile (double x) break; } - if (i >= n_percentiles || tokval != percentiles[i].p) + if (i >= n_percentiles || x != percentiles[i].p) { percentiles = pool_nrealloc (int_pool, percentiles, n_percentiles + 1, sizeof *percentiles); @@ -997,7 +998,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); @@ -1005,10 +1006,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); @@ -1016,7 +1017,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_; @@ -1031,11 +1032,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); @@ -1043,14 +1044,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); } @@ -1058,7 +1059,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_; @@ -1079,11 +1080,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) @@ -1097,7 +1098,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_; @@ -1118,11 +1119,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) @@ -1144,9 +1145,9 @@ full_dim (struct tab_table *t, struct outp_driver *d) int i; if (lab) - t->w[0] = min (tab_natural_width (t, d, 0), d->prop_em_width * 15); + t->w[0] = MIN (tab_natural_width (t, d, 0), d->prop_em_width * 15); for (i = lab; i < lab + 5; i++) - t->w[i] = max (tab_natural_width (t, d, i), d->prop_em_width * 8); + t->w[i] = MAX (tab_natural_width (t, d, i), d->prop_em_width * 8); for (i = 0; i < t->nr; i++) t->h[i] = d->font_height; } @@ -1258,9 +1259,8 @@ dump_full (struct variable *v) tab_float (t, 2 + lab, r, TAB_NONE, 100.0, 5, 1); tab_float (t, 3 + lab, r, TAB_NONE, 100.0, 5, 1); - tab_title (t, "%s: %s", v->name, v->label ? v->label : ""); + tab_title (t, "%s", var_to_string (v)); tab_submit (t); - } /* Sets the widths of all the columns and heights of all the rows in @@ -1268,14 +1268,14 @@ dump_full (struct variable *v) static void condensed_dim (struct tab_table *t, struct outp_driver *d) { - int cum_w = max (outp_string_width (d, _("Cum"), OUTP_PROPORTIONAL), - max (outp_string_width (d, _("Cum"), OUTP_PROPORTIONAL), + int cum_w = MAX (outp_string_width (d, _("Cum"), OUTP_PROPORTIONAL), + MAX (outp_string_width (d, _("Cum"), OUTP_PROPORTIONAL), outp_string_width (d, "000", OUTP_PROPORTIONAL))); int i; for (i = 0; i < 2; i++) - t->w[i] = max (tab_natural_width (t, d, i), d->prop_em_width * 8); + t->w[i] = MAX (tab_natural_width (t, d, i), d->prop_em_width * 8); for (i = 2; i < 4; i++) t->w[i] = cum_w; for (i = 0; i < t->nr; i++) @@ -1334,7 +1334,7 @@ dump_condensed (struct variable *v) cmd.spaces == FRQ_SINGLE ? -1 : TAL_GAP, TAL_1, 0, 0, 3, r - 1); tab_hline (t, TAL_2, 0, 3, 2); - tab_title (t, "%s: %s", v->name, v->label ? v->label : ""); + tab_title (t, "%s", var_to_string (v)); tab_columns (t, SOM_COL_DOWN, 1); tab_submit (t); } @@ -1518,13 +1518,13 @@ dump_statistics (struct variable *v, int show_varname) if ( implicit_50th && n_percentiles > 0 ) --n_percentiles; - if (v->type == ALPHA) + if (var_is_alpha (v)) return; ft = &get_var_freqs (v)->tab; if (ft->n_valid == 0) { msg (SW, _("No valid data for variable %s; statistics not displayed."), - v->name); + var_get_name (v)); return; } calc_stats (v, stat_value); @@ -1571,12 +1571,7 @@ dump_statistics (struct variable *v, int show_varname) tab_columns (t, SOM_COL_DOWN, 1); if (show_varname) - { - if (v->label) - tab_title (t, "%s: %s", v->name, v->label); - else - tab_title (t, "%s", v->name); - } + tab_title (t, "%s", var_to_string (v)); else tab_flags (t, SOMF_NO_TITLE); @@ -1603,7 +1598,7 @@ freq_tab_to_hist(const struct freq_tab *ft, const struct variable *var) /* Find out the extremes of the x value */ for ( frq = hsh_first(fh, &hi); frq != 0; frq = hsh_next(fh, &hi) ) { - if ( mv_is_value_missing(&var->miss, frq->v)) + if ( var_is_value_missing(var, frq->v)) continue; if ( frq->v[0].f < x_min ) x_min = frq->v[0].f ;