[PPL-devel] [GIT] ppl/ppl(pip): Added reference to the Problem object in solution tree Nodes.
François Galea
francois.galea at uvsq.fr
Tue Sep 22 11:11:10 CEST 2009
Module: ppl/ppl
Branch: pip
Commit: a6ea14f4ac3f3c9d64b4f0d3db728cec03ff7c9c
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=a6ea14f4ac3f3c9d64b4f0d3db728cec03ff7c9c
Author: François Galea <francois.galea at uvsq.fr>
Date: Tue Sep 22 09:30:53 2009 +0200
Added reference to the Problem object in solution tree Nodes.
---
src/PIP_Problem.cc | 2 +-
src/PIP_Problem.defs.hh | 1 +
src/PIP_Tree.cc | 25 +++++++++++++++----------
src/PIP_Tree.defs.hh | 9 ++++++---
4 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/src/PIP_Problem.cc b/src/PIP_Problem.cc
index ec42436..6d651fa 100644
--- a/src/PIP_Problem.cc
+++ b/src/PIP_Problem.cc
@@ -77,7 +77,7 @@ PPL::PIP_Problem::solve() const {
PIP_Problem_Status return_value;
if (current_solution == 0)
- x.current_solution = new PIP_Solution_Node();
+ x.current_solution = new PIP_Solution_Node(&x);
x.current_solution->update_tableau(&x.current_solution,
external_space_dim,
diff --git a/src/PIP_Problem.defs.hh b/src/PIP_Problem.defs.hh
index 58ebff5..3accf0e 100644
--- a/src/PIP_Problem.defs.hh
+++ b/src/PIP_Problem.defs.hh
@@ -83,6 +83,7 @@ operator<<(std::ostream& s, const PIP_Problem& p);
the change of objective function and the change of optimization mode.
*/
class Parma_Polyhedra_Library::PIP_Problem {
+ friend class PIP_Solution_Node;
public:
//! Builds a trivial PIP problem.
/*!
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index 45d25e1..b81d10b 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -22,6 +22,7 @@ site: http://www.cs.unipr.it/ppl/ . */
#include <ppl-config.h>
#include "PIP_Tree.defs.hh"
+#include "PIP_Problem.defs.hh"
#include <algorithm>
@@ -64,12 +65,14 @@ negate_assign(Row& x, const Row& y) {
} // namespace
-PIP_Tree_Node::PIP_Tree_Node()
- : constraints_() {
+PIP_Tree_Node::PIP_Tree_Node(PIP_Problem* p)
+ : problem(p),
+ constraints_() {
}
PIP_Tree_Node::PIP_Tree_Node(const PIP_Tree_Node &x)
- : constraints_(x.constraints_) {
+ : problem(x.problem),
+ constraints_(x.constraints_) {
}
PIP_Decision_Node::~PIP_Decision_Node() {
@@ -81,8 +84,8 @@ PIP_Decision_Node::~PIP_Decision_Node() {
PIP_Solution_Node::~PIP_Solution_Node() {
}
-PIP_Solution_Node::PIP_Solution_Node()
- : PIP_Tree_Node(),
+PIP_Solution_Node::PIP_Solution_Node(PIP_Problem* p)
+ : PIP_Tree_Node(p),
tableau(),
basis(),
mapping(),
@@ -99,7 +102,7 @@ PIP_Solution_Node::PIP_Solution_Node(const PIP_Solution_Node &x)
PIP_Solution_Node::PIP_Solution_Node(const PIP_Solution_Node &x,
bool empty_constraints)
- : PIP_Tree_Node(),
+ : PIP_Tree_Node(x.problem),
tableau(x.tableau),
basis(x.basis),
mapping(x.mapping),
@@ -108,8 +111,10 @@ PIP_Solution_Node::PIP_Solution_Node(const PIP_Solution_Node &x,
constraints_ = x.constraints_;
}
-PIP_Decision_Node::PIP_Decision_Node(PIP_Tree_Node* fcp, PIP_Tree_Node* tcp)
- : PIP_Tree_Node(),
+PIP_Decision_Node::PIP_Decision_Node(PIP_Problem* p,
+ PIP_Tree_Node* fcp,
+ PIP_Tree_Node* tcp)
+ : PIP_Tree_Node(p),
true_child(tcp),
false_child(fcp) {
}
@@ -882,13 +887,13 @@ PIP_Solution_Node::solve(PIP_Tree_Node*& parent_ref,
}
/* Create a decision Node to become parent of current Node */
- PIP_Decision_Node *parent = new PIP_Decision_Node(fals, tru);
+ PIP_Decision_Node *parent = new PIP_Decision_Node(problem, fals, tru);
parent->add_constraint(test);
if (!cs.empty()) {
/* If node to be solved had tautologies, store them in a new
decision node */
- parent = new PIP_Decision_Node(0, parent);
+ parent = new PIP_Decision_Node(problem, 0, parent);
cs.swap(parent->constraints_);
}
diff --git a/src/PIP_Tree.defs.hh b/src/PIP_Tree.defs.hh
index 7ac9ec2..fcbd62e 100644
--- a/src/PIP_Tree.defs.hh
+++ b/src/PIP_Tree.defs.hh
@@ -75,7 +75,7 @@ public:
protected:
//! Default constructor.
- PIP_Tree_Node();
+ PIP_Tree_Node(PIP_Problem* p);
//! Copy constructor.
PIP_Tree_Node(const PIP_Tree_Node &x);
@@ -89,6 +89,9 @@ protected:
friend class PIP_Decision_Node;
friend class PIP_Solution_Node;
+ //! A pointer to the master problem object.
+ PIP_Problem* problem;
+
//! The local system of parameter constraints.
Constraint_System constraints_;
@@ -141,7 +144,7 @@ protected:
class PIP_Solution_Node : public PIP_Tree_Node {
public:
//! Default constructor.
- PIP_Solution_Node();
+ PIP_Solution_Node(PIP_Problem* p);
//! Destructor.
~PIP_Solution_Node();
@@ -383,7 +386,7 @@ private:
\exception std::invalid_argument
Thrown if \p cs contains strict inequalities.
*/
- PIP_Decision_Node(PIP_Tree_Node* fcp, PIP_Tree_Node* tcp);
+ PIP_Decision_Node(PIP_Problem* p, PIP_Tree_Node* fcp, PIP_Tree_Node* tcp);
protected:
/*! \brief
More information about the PPL-devel
mailing list