X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fvariable.c;h=8acac77fb2072a937207f627d92b4b1fd584c4c6;hb=104503e3d1f3d6ad47ef06e5a9d42b18e0fa67cb;hp=2b0dd2579dc49c39a228755faff72fb57b060a9b;hpb=bc8bf17d5f839d6745eed040b7a28cea22b02ef5;p=pspp diff --git a/src/data/variable.c b/src/data/variable.c index 2b0dd2579d..8acac77fb2 100644 --- a/src/data/variable.c +++ b/src/data/variable.c @@ -109,7 +109,7 @@ struct variable /* Used only for system and portable file input and output. See short-names.h. */ char **short_names; - size_t short_name_cnt; + size_t n_short_names; /* Custom attributes. */ struct attrset attributes; @@ -128,12 +128,11 @@ static void var_set_name_quiet (struct variable *v, const char *name); struct variable * var_create (const char *name, int width) { - struct variable *v; enum val_type type; assert (width >= 0 && width <= MAX_STRING); - v = xzalloc (sizeof *v); + struct variable *v = XZALLOC (struct variable); var_set_name_quiet (v, name); v->width = width; mv_init (&v->miss, width); @@ -307,17 +306,15 @@ var_set_width_and_formats (struct variable *v, int new_width, ov = var_clone (v); - if (var_has_missing_values (v)) + if (mv_is_resizable (&v->miss, new_width)) + mv_resize (&v->miss, new_width); + else { - if (mv_is_resizable (&v->miss, new_width)) - mv_resize (&v->miss, new_width); - else - { - mv_destroy (&v->miss); - mv_init (&v->miss, new_width); - } - traits |= VAR_TRAIT_MISSING_VALUES; + mv_destroy (&v->miss); + mv_init (&v->miss, new_width); } + if (new_width != var_get_width (v)) + traits |= VAR_TRAIT_MISSING_VALUES; if (v->val_labs != NULL) { @@ -442,32 +439,28 @@ var_has_missing_values (const struct variable *v) return !mv_is_empty (&v->miss); } -/* Returns true if VALUE is in the given CLASS of missing values - in V, false otherwise. */ -bool -var_is_value_missing (const struct variable *v, const union value *value, - enum mv_class class) +/* Returns MV_SYSTEM if VALUE is system-missing, MV_USER if VALUE is + user-missing for V, and otherwise 0. */ +enum mv_class +var_is_value_missing (const struct variable *v, const union value *value) { - return mv_is_value_missing (&v->miss, value, class); + return mv_is_value_missing (&v->miss, value); } -/* Returns true if D is in the given CLASS of missing values in - V, false otherwise. - V must be a numeric variable. */ -bool -var_is_num_missing (const struct variable *v, double d, enum mv_class class) +/* Returns MV_SYSTEM if VALUE is system-missing, MV_USER if VALUE is + user-missing for V, and otherwise 0. V must be a numeric variable. */ +enum mv_class +var_is_num_missing (const struct variable *v, double d) { - return mv_is_num_missing (&v->miss, d, class); + return mv_is_num_missing (&v->miss, d); } -/* Returns true if S[] is a missing value for V, false otherwise. - S[] must contain exactly as many characters as V's width. - V must be a string variable. */ -bool -var_is_str_missing (const struct variable *v, const uint8_t s[], - enum mv_class class) +/* Returns MV_USER if VALUE is user-missing for V and otherwise 0. V must be + a string variable. */ +enum mv_class +var_is_str_missing (const struct variable *v, const uint8_t s[]) { - return mv_is_str_missing (&v->miss, s, class); + return mv_is_str_missing (&v->miss, s); } /* Returns variable V's value labels, @@ -574,7 +567,8 @@ static void append_value (const struct variable *v, const union value *value, struct string *str) { - char *s = data_out (value, var_get_encoding (v), &v->print); + char *s = data_out (value, var_get_encoding (v), &v->print, + settings_get_fmt_settings ()); struct substring ss = ss_cstr (s); ss_rtrim (&ss, ss_cstr (" ")); ds_put_substring (str, ss); @@ -1124,9 +1118,9 @@ var_must_leave (const struct variable *v) all if it hasn't been saved to or read from a system or portable file. */ size_t -var_get_short_name_cnt (const struct variable *var) +var_get_n_short_names (const struct variable *var) { - return var->short_name_cnt; + return var->n_short_names; } /* Returns VAR's short name with the given IDX, if it has one @@ -1136,7 +1130,7 @@ var_get_short_name_cnt (const struct variable *var) const char * var_get_short_name (const struct variable *var, size_t idx) { - return idx < var->short_name_cnt ? var->short_names[idx] : NULL; + return idx < var->n_short_names ? var->short_names[idx] : NULL; } /* Sets VAR's short name with the given IDX to the UTF-8 string SHORT_NAME. @@ -1151,7 +1145,7 @@ var_set_short_name (struct variable *var, size_t idx, const char *short_name) struct variable *ov = var_clone (var); /* Clear old short name numbered IDX, if any. */ - if (idx < var->short_name_cnt) + if (idx < var->n_short_names) { free (var->short_names[idx]); var->short_names[idx] = NULL; @@ -1160,14 +1154,14 @@ var_set_short_name (struct variable *var, size_t idx, const char *short_name) /* Install new short name for IDX. */ if (short_name != NULL) { - if (idx >= var->short_name_cnt) + if (idx >= var->n_short_names) { - size_t old_cnt = var->short_name_cnt; + size_t n_old = var->n_short_names; size_t i; - var->short_name_cnt = MAX (idx * 2, 1); - var->short_names = xnrealloc (var->short_names, var->short_name_cnt, + var->n_short_names = MAX (idx * 2, 1); + var->short_names = xnrealloc (var->short_names, var->n_short_names, sizeof *var->short_names); - for (i = old_cnt; i < var->short_name_cnt; i++) + for (i = n_old; i < var->n_short_names; i++) var->short_names[i] = NULL; } var->short_names[idx] = utf8_to_upper (short_name); @@ -1182,11 +1176,11 @@ var_clear_short_names (struct variable *v) { size_t i; - for (i = 0; i < v->short_name_cnt; i++) + for (i = 0; i < v->n_short_names; i++) free (v->short_names[i]); free (v->short_names); v->short_names = NULL; - v->short_name_cnt = 0; + v->n_short_names = 0; } /* Relationship with dictionary. */ @@ -1332,7 +1326,7 @@ var_clear_vardict (struct variable *v) double var_force_valid_weight (const struct variable *wv, double w, bool *warn_on_invalid) { - if (w < 0.0 || (wv && var_is_num_missing (wv, w, MV_ANY))) + if (w < 0.0 || (wv && var_is_num_missing (wv, w))) w = 0.0; if (w == 0.0 && warn_on_invalid != NULL && *warn_on_invalid)