Got rid of approx.h and replaced all references to approx_eq() by ==,
[pspp] / src / vars-atr.c
index d1bbd610805f4067537ed0d7fb634e7b40135086..ee4d230246c6e233d68a52e65b8de7f97b60a897 100644 (file)
@@ -22,7 +22,6 @@
 #include <assert.h>
 #include <stdlib.h>
 #include "alloc.h"
-#include "approx.h"
 #include "command.h"
 #include "do-ifP.h"
 #include "expr.h"
 
 #include "debug-print.h"
 
+/* Compares A and B, which both have the given WIDTH, and returns
+   a strcmp()-type result. */
+int
+compare_values (const union value *a, const union value *b, int width) 
+{
+  if (width == 0) 
+    return a->f < b->f ? -1 : a->f > b->f;
+  else
+    return memcmp (a->s, b->s, width);
+}
+
 /* Discards all the current state in preparation for a data-input
    command like DATA LIST or GET. */
 void
@@ -73,31 +83,25 @@ is_num_user_missing (double x, const struct variable *v)
     case MISSING_NONE:
       return 0;
     case MISSING_1:
-      return approx_eq (x, v->missing[0].f);
+      return x == v->missing[0].f;
     case MISSING_2:
-      return (approx_eq (x, v->missing[0].f)
-             || approx_eq (x, v->missing[1].f));
+      return x == v->missing[0].f || x == v->missing[1].f;
     case MISSING_3:
-      return (approx_eq (x, v->missing[0].f)
-             || approx_eq (x, v->missing[1].f)
-             || approx_eq (x, v->missing[2].f));
+      return (x == v->missing[0].f || x == v->missing[1].f
+              || x == v->missing[2].f);
     case MISSING_RANGE:
-      return (approx_ge (x, v->missing[0].f)
-             && approx_le (x, v->missing[1].f));
+      return x >= v->missing[0].f && x <= v->missing[1].f;
     case MISSING_LOW:
-      return approx_le (x, v->missing[0].f);
+      return x <= v->missing[0].f;
     case MISSING_HIGH:
-      return approx_ge (x, v->missing[0].f);
+      return x >= v->missing[0].f;
     case MISSING_RANGE_1:
-      return ((approx_ge (x, v->missing[0].f)
-              && approx_le (x, v->missing[1].f))
-             || approx_eq (x, v->missing[2].f));
+      return ((x >= v->missing[0].f && x <= v->missing[1].f)
+             || x == v->missing[2].f);
     case MISSING_LOW_1:
-      return (approx_le (x, v->missing[0].f)
-             || approx_eq (x, v->missing[1].f));
+      return x <= v->missing[0].f || x == v->missing[1].f;
     case MISSING_HIGH_1:
-      return (approx_ge (x, v->missing[0].f)
-             || approx_eq (x, v->missing[1].f));
+      return x >= v->missing[0].f || x == v->missing[1].f;
     default:
       assert (0);
     }
@@ -174,7 +178,7 @@ is_user_missing (const union value *val, const struct variable *v)
 /* A hsh_compare_func that orders variables A and B by their
    names. */
 int
-compare_variables (const void *a_, const void *b_, void *foo unused
+compare_variables (const void *a_, const void *b_, void *foo UNUSED
 {
   const struct variable *a = a_;
   const struct variable *b = b_;
@@ -184,7 +188,7 @@ compare_variables (const void *a_, const void *b_, void *foo unused)
 
 /* A hsh_hash_func that hashes variable V based on its name. */
 unsigned
-hash_variable (const void *v_, void *foo unused
+hash_variable (const void *v_, void *foo UNUSED
 {
   const struct variable *v = v_;