const GEnumValue measure[] =
{
+ {MEASURE_UNKNOWN, "unknown", N_("Unknown")},
{MEASURE_NOMINAL, "nominal", N_("Nominal")},
{MEASURE_ORDINAL, "ordinal", N_("Ordinal")},
{MEASURE_SCALE, "scale", N_("Scale")},
/* 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;
v->leave = var_must_leave (v);
type = val_type_from_width (width);
v->alignment = var_default_alignment (type);
- v->measure = var_default_measure (type);
+ v->measure = var_default_measure_for_type (type);
v->role = ROLE_INPUT;
v->display_width = var_default_display_width (width);
v->print = v->write = var_default_formats (width);
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);
}
\f
/* Returns variable V's value labels,
bool
measure_is_valid (enum measure m)
{
- return m == MEASURE_NOMINAL || m == MEASURE_ORDINAL || m == MEASURE_SCALE;
+ return (m == MEASURE_UNKNOWN || m == MEASURE_NOMINAL
+ || m == MEASURE_ORDINAL || m == MEASURE_SCALE);
}
/* Returns a string version of measurement level M, for display to a user.
used to reset a variable's measurement level to the
default. */
enum measure
-var_default_measure (enum val_type type)
+var_default_measure_for_type (enum val_type type)
{
- return type == VAL_NUMERIC ? MEASURE_SCALE : MEASURE_NOMINAL;
+ return type == VAL_NUMERIC ? MEASURE_UNKNOWN : MEASURE_NOMINAL;
+}
+
+/* Returns the default measurement level for a variable with the given
+ FORMAT, or MEASURE_UNKNOWN if there is no good default. */
+enum measure
+var_default_measure_for_format (enum fmt_type format)
+{
+ if (format == FMT_DOLLAR)
+ return MEASURE_SCALE;
+
+ switch (fmt_get_category (format))
+ {
+ case FMT_CAT_BASIC:
+ case FMT_CAT_LEGACY:
+ case FMT_CAT_BINARY:
+ case FMT_CAT_HEXADECIMAL:
+ return MEASURE_UNKNOWN;
+
+ case FMT_CAT_CUSTOM:
+ case FMT_CAT_DATE:
+ case FMT_CAT_TIME:
+ return MEASURE_SCALE;
+
+ case FMT_CAT_DATE_COMPONENT:
+ case FMT_CAT_STRING:
+ return MEASURE_NOMINAL;
+ }
+
+ NOT_REACHED ();
}
\f
/* Returns true if M is a valid variable role,
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
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.
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;
/* 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);
{
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;
}
\f
/* Relationship with dictionary. */
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)