#include <assert.h>
#include <stdlib.h>
#include "alloc.h"
-#include "approx.h"
#include "command.h"
#include "do-ifP.h"
#include "expr.h"
/* Compares A and B, which both have the given WIDTH, and returns
a strcmp()-type result. */
int
-compare_values (union value *a, union value *b, int width)
+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;
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;
}
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);
}