[PPL-devel] [GIT] ppl/ppl(pip): Added a pointer to parent node in PIP_Tree_Node.

François Galea francois.galea at uvsq.fr
Thu Nov 19 13:12:26 CET 2009


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

Author: François Galea <francois.galea at uvsq.fr>
Date:   Thu Nov 19 11:59:53 2009 +0100

Added a pointer to parent node in PIP_Tree_Node.

---

 src/PIP_Tree.cc         |   18 ++++++++++++++----
 src/PIP_Tree.defs.hh    |    9 +++++++++
 src/PIP_Tree.inlines.hh |   10 ++++++++++
 3 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index b4996cf..64a65b9 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -148,12 +148,14 @@ operator<<(std::ostream& os, const PIP_Tree_Node::Artificial_Parameter& x) {
 } // namespace IO_Operators
 
 PIP_Tree_Node::PIP_Tree_Node()
-  : constraints_(),
+  : parent_(0),
+    constraints_(),
     artificial_parameters() {
 }
 
 PIP_Tree_Node::PIP_Tree_Node(const PIP_Tree_Node &x)
-  : constraints_(x.constraints_),
+  : parent_(0),
+    constraints_(x.constraints_),
     artificial_parameters(x.artificial_parameters) {
 }
 
@@ -256,16 +258,24 @@ PIP_Decision_Node::PIP_Decision_Node(PIP_Tree_Node* fcp,
   : PIP_Tree_Node(),
     true_child(tcp),
     false_child(fcp) {
+  if (fcp != 0)
+    fcp->set_parent(this);
+  if (tcp != 0)
+    tcp->set_parent(this);
 }
 
 PIP_Decision_Node ::PIP_Decision_Node(const PIP_Decision_Node& x)
   : PIP_Tree_Node(x),
     true_child(0),
     false_child(0) {
-  if (x.true_child != 0)
+  if (x.true_child != 0) {
     true_child = x.true_child->clone();
-  if (x.false_child != 0)
+    true_child->set_parent(this);
+  }
+  if (x.false_child != 0) {
     false_child = x.false_child->clone();
+    false_child->set_parent(this);
+  }
 }
 
 const PIP_Solution_Node*
diff --git a/src/PIP_Tree.defs.hh b/src/PIP_Tree.defs.hh
index ae5a461..1e2e01a 100644
--- a/src/PIP_Tree.defs.hh
+++ b/src/PIP_Tree.defs.hh
@@ -150,12 +150,21 @@ protected:
   friend class PIP_Decision_Node;
   friend class PIP_Solution_Node;
 
+  //! A pointer to \p *this 's parent, or 0 if \p *this is the root node.
+  const PIP_Decision_Node* parent_;
+
   //! The local system of parameter constraints.
   Constraint_System constraints_;
 
   //! The local sequence of expressions for local artificial parameters.
   Artificial_Parameter_Sequence artificial_parameters;
 
+  //! Set this node's parent to \p *p.
+  void set_parent(const PIP_Decision_Node* p);
+
+  //! Returns a pointer to this node's parent.
+  const PIP_Decision_Node* parent() const;
+
   /*! \brief
     Populates the parametric simplex tableau using external data, if necessary
 
diff --git a/src/PIP_Tree.inlines.hh b/src/PIP_Tree.inlines.hh
index 8901588..0e0b8f8 100644
--- a/src/PIP_Tree.inlines.hh
+++ b/src/PIP_Tree.inlines.hh
@@ -67,6 +67,16 @@ inline
 PIP_Tree_Node::~PIP_Tree_Node() {
 }
 
+inline void
+PIP_Tree_Node::set_parent(const PIP_Decision_Node* p) {
+  parent_ = p;
+}
+
+inline const PIP_Decision_Node*
+PIP_Tree_Node::parent() const {
+  return parent_;
+}
+
 inline const Constraint_System&
 PIP_Tree_Node::constraints() const {
   return constraints_;




More information about the PPL-devel mailing list