#include <compiler/NodeFactory.h>
#include <graph/Node.h>

#include <cfloat>

static const double tol = 16 * DBL_EPSILON;

NodeFactory::~NodeFactory()
{}

Graph const &NodeFactory::graph() const
{
  return _graph;
}

bool equal(double arg1, double arg2)
{
  if (arg1 == JAGS_NA || arg2 == JAGS_NA)
    return false;
  else 
    return !(arg1 + tol < arg2 || arg2 + tol < arg1);
}

bool equal(Node const *node1, Node const *node2)
{
  if (node1 == node2) {
    return true;
  }
  else if (isObserved(node1) && isObserved(node2) &&
	   node1->data.length() == node2->data.length()) {
    unsigned long n = node1->data.length();
    double const *value1 = node1->data.value();
    double const *value2 = node2->data.value();
    for (unsigned long i = 0; i < n; ++i) {
      if (!equal(value1[i],value2[i])) {
	return false;
      }
    }
    return true;
  }
  else {
    return false;
  }
}


syntax highlighted by Code2HTML, v. 0.9.1