X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvars-atr.c;h=0b6877dbf72c1012d6c2d7ffa44a5e3d654689ef;hb=c87fb686f323f651a1d3f3892c31bf66788916d9;hp=7efc5390a6d3c4ada3b8a426139c60576060a4cc;hpb=ccf2f45c091ce1555b4e2a36186c501675c18a59;p=pspp diff --git a/src/vars-atr.c b/src/vars-atr.c index 7efc5390a6..0b6877dbf7 100644 --- a/src/vars-atr.c +++ b/src/vars-atr.c @@ -19,10 +19,9 @@ #include #include "var.h" -#include +#include "error.h" #include #include "alloc.h" -#include "approx.h" #include "command.h" #include "do-ifP.h" #include "expr.h" @@ -46,6 +45,22 @@ compare_values (const union value *a, const union value *b, int width) return memcmp (a->s, b->s, width); } +/* Create a hash of v */ +unsigned +hash_value(const union value *v, int width) +{ + unsigned id_hash; + + if ( 0 == width ) + id_hash = hsh_hash_double (v->f); + else + id_hash = hsh_hash_bytes (v->s, width); + + return id_hash; +} + + + /* Discards all the current state in preparation for a data-input command like DATA LIST or GET. */ void @@ -56,9 +71,9 @@ discard_variables (void) n_lag = 0; - if (vfm_source) + if (vfm_source != NULL) { - vfm_source->destroy_source (); + free_case_source (vfm_source); vfm_source = NULL; } @@ -84,31 +99,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); }