fix showing the weights on edge labels when there is a SetOrNode ancestor

This commit is contained in:
Tiago Gomes 2012-12-09 17:33:36 +00:00
parent 59f653aabd
commit 57a31c2c36
2 changed files with 14 additions and 2 deletions

View File

@ -78,6 +78,16 @@ double
LeafNode::weight (void) const
{
assert (clause_->isUnit());
if (clause_->posCountedLogVars().empty() == false
|| clause_->negCountedLogVars().empty() == false) {
if (SetOrNode::isSet() == false) {
// return a NaN if we have a SetOrNode
// ancester that is not set. This can only
// happen when calculating the weights
// for the edge labels in graphviz
return 0.0 / 0.0;
}
}
double weight = clause_->literals()[0].isPositive()
? lwcnf_.posWeight (clause_->literals().front().lid())
: lwcnf_.negWeight (clause_->literals().front().lid());
@ -226,7 +236,7 @@ LiftedCircuit::compile (
}
if (clauses.empty()) {
*follow = new TrueNode ();
*follow = new TrueNode();
return;
}

View File

@ -75,9 +75,11 @@ class SetOrNode : public CircuitNode
CircuitNode** follow (void) { return &follow_; }
static unsigned nrPositives (void) { return nrGrsStack.top().first; }
static unsigned nrPositives (void) { return nrGrsStack.top().first; }
static unsigned nrNegatives (void) { return nrGrsStack.top().second; }
static bool isSet (void) { return nrGrsStack.size() > 0; }
double weight (void) const;