Change how checking for missing values works.
[pspp] / src / data / variable.c
index 3f32fa5d02b8206b6308db9687475f3a796ed74d..8acac77fb2072a937207f627d92b4b1fd584c4c6 100644 (file)
@@ -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;
@@ -439,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);
 }
 \f
 /* Returns variable V's value labels,
@@ -1122,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
@@ -1134,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.
@@ -1149,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;
@@ -1158,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);
@@ -1180,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;
 }
 \f
 /* Relationship with dictionary. */
@@ -1330,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)