projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make the expression code a little nicer and fix bugs found
[pspp]
/
src
/
vars-atr.c
diff --git
a/src/vars-atr.c
b/src/vars-atr.c
index 7efc5390a6d3c4ada3b8a426139c60576060a4cc..c0730022354f2ab88dfe278b4d6949fb61bc04b9 100644
(file)
--- a/
src/vars-atr.c
+++ b/
src/vars-atr.c
@@
-19,10
+19,9
@@
#include <config.h>
#include "var.h"
#include <config.h>
#include "var.h"
-#include
<assert.h>
+#include
"error.h"
#include <stdlib.h>
#include "alloc.h"
#include <stdlib.h>
#include "alloc.h"
-#include "approx.h"
#include "command.h"
#include "do-ifP.h"
#include "expr.h"
#include "command.h"
#include "do-ifP.h"
#include "expr.h"
@@
-56,9
+55,11
@@
discard_variables (void)
n_lag = 0;
n_lag = 0;
- if (vfm_source)
+ if (vfm_source
!= NULL
)
{
{
- vfm_source->destroy_source ();
+ if (vfm_source->class->destroy != NULL)
+ vfm_source->class->destroy (vfm_source);
+ free (vfm_source);
vfm_source = NULL;
}
vfm_source = NULL;
}
@@
-84,31
+85,25
@@
is_num_user_missing (double x, const struct variable *v)
case MISSING_NONE:
return 0;
case MISSING_1:
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:
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:
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:
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:
case MISSING_LOW:
- return
approx_le (x, v->missing[0].f)
;
+ return
x <= v->missing[0].f
;
case MISSING_HIGH:
case MISSING_HIGH:
- return
approx_ge (x, v->missing[0].f)
;
+ return
x >= v->missing[0].f
;
case MISSING_RANGE_1:
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:
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:
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);
}
default:
assert (0);
}