[PPL-devel] [GIT] ppl/ppl(pip): Improved consistency checks in method PIP_Decision_Node ::OK().

Enea Zaffanella zaffanella at cs.unipr.it
Sat Jan 30 20:51:39 CET 2010


Module: ppl/ppl
Branch: pip
Commit: b728ad412284bf04adf16ae4dba749b4f0627651
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=b728ad412284bf04adf16ae4dba749b4f0627651

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Sat Jan 30 20:50:27 2010 +0100

Improved consistency checks in method PIP_Decision_Node::OK().

---

 src/PIP_Tree.cc |   22 +++++++++++++---------
 1 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index 800992b..3e42b9f 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -569,27 +569,31 @@ PIP_Solution_Node::OK() const {
 bool
 PIP_Decision_Node::OK() const {
   /* FIXME: finish me! */
-#ifndef NDEBUG
-  using std::endl;
-  using std::cerr;
-#endif
+
+  // Perform base class well-formedness check on this node.
   if (!PIP_Tree_Node::OK())
     return false;
 
-  // Decision nodes with false child must have exactly one constraint
+  // Recursively check if child nodes are well-formed.
+  if (true_child && !true_child->OK())
+    return false;
+  if (false_child && !false_child->OK())
+    return false;
+
+  // Decision nodes with a false child must have exactly one constraint.
   if (false_child) {
     dimension_type
-        dist = std::distance(constraints_.begin(), constraints_.end());
+      dist = std::distance(constraints_.begin(), constraints_.end());
     if (dist != 1) {
 #ifndef NDEBUG
-      cerr << "The PIP_Decision_Node has a 'false' child but does not "
-           << "have exactly one parametric constraint. (" << dist << ")"
-           << endl;
+      std::cerr << "PIP_Decision_Node with a 'false' child has "
+                << dist << " parametric constraints (should be 1).\n";
 #endif
       return false;
     }
   }
 
+  // All checks passed.
   return true;
 }
 




More information about the PPL-devel mailing list