X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvars-atr.c;h=ee4d230246c6e233d68a52e65b8de7f97b60a897;hb=60d7d619ee7885ad065f178eb0cf1e5d432b1921;hp=d1bbd610805f4067537ed0d7fb634e7b40135086;hpb=3a7fba81ceae5b049d0f7d671e9e3c3c43bbf703;p=pspp diff --git a/src/vars-atr.c b/src/vars-atr.c index d1bbd61080..ee4d230246 100644 --- a/src/vars-atr.c +++ b/src/vars-atr.c @@ -22,7 +22,6 @@ #include #include #include "alloc.h" -#include "approx.h" #include "command.h" #include "do-ifP.h" #include "expr.h" @@ -35,6 +34,17 @@ #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_;