[GIT] ppl/ppl(pip): Redefined and implemented the tree node constructors.

Module: ppl/ppl Branch: pip Commit: c93acf108e683d72dc4aef9f6e93d7d7b29b206a URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=c93acf108e683...
Author: François Galea francois.galea@uvsq.fr Date: Wed Sep 16 15:15:28 2009 +0200
Redefined and implemented the tree node constructors.
---
src/PIP_Tree.cc | 40 +++++++++++++++++++++++++++++++++++++ src/PIP_Tree.defs.hh | 53 +++++++++++++++++++++++++------------------------ 2 files changed, 67 insertions(+), 26 deletions(-)
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc index c9f576a..30e4080 100644 --- a/src/PIP_Tree.cc +++ b/src/PIP_Tree.cc @@ -64,6 +64,13 @@ negate_assign(Row& x, const Row& y) {
} // namespace
+PIP_Tree_Node::PIP_Tree_Node() + : constraints_() { +} + +PIP_Tree_Node::PIP_Tree_Node(const PIP_Tree_Node &x) + : constraints_(x.constraints_) { +}
PIP_Decision_Node::~PIP_Decision_Node() { delete true_child; @@ -73,6 +80,39 @@ PIP_Decision_Node::~PIP_Decision_Node() { PIP_Solution_Node::~PIP_Solution_Node() { }
+PIP_Solution_Node::PIP_Solution_Node() + : PIP_Tree_Node(), + tableau(), + basis(), + mapping(), + sign() { +} + +PIP_Solution_Node::PIP_Solution_Node(const PIP_Solution_Node &x) + : PIP_Tree_Node(x), + tableau(x.tableau), + basis(x.basis), + mapping(x.mapping), + sign(x.sign) { +} + +PIP_Solution_Node::PIP_Solution_Node(const PIP_Solution_Node &x, + bool empty_constraints) + : PIP_Tree_Node(), + tableau(x.tableau), + basis(x.basis), + mapping(x.mapping), + sign(x.sign) { + if (!empty_constraints) + constraints_ = x.constraints_; +} + +PIP_Decision_Node::PIP_Decision_Node(PIP_Tree_Node* fcp, PIP_Tree_Node* tcp) + : PIP_Tree_Node(), + true_child(tcp), + false_child(fcp) { +} + const PIP_Solution_Node* PIP_Tree_Node::as_solution() const { return 0; diff --git a/src/PIP_Tree.defs.hh b/src/PIP_Tree.defs.hh index e88aa0f..72c6fc6 100644 --- a/src/PIP_Tree.defs.hh +++ b/src/PIP_Tree.defs.hh @@ -71,6 +71,12 @@ public: const Constraint_System& constraints() const;
protected: + //! Default constructor. + PIP_Tree_Node(); + + //! Copy constructor. + PIP_Tree_Node(const PIP_Tree_Node &x); + //! A type alias for a sequence of constraints. typedef std::vector<Constraint> Constraint_Sequence;
@@ -78,6 +84,7 @@ protected: // constructor and methods. friend class PIP_Problem; friend class PIP_Decision_Node; + friend class PIP_Solution_Node;
//! The local system of parameter constraints. Constraint_System constraints_; @@ -127,6 +134,9 @@ protected: //! A tree node representing part of the space of solutions. class PIP_Solution_Node : public PIP_Tree_Node { public: + //! Default constructor. + PIP_Solution_Node(); + //! Destructor. ~PIP_Solution_Node();
@@ -272,6 +282,12 @@ private: static bool compatibility_check(const Matrix &ctx, const Row &cnst);
protected: + //! Copy constructor. + PIP_Solution_Node(const PIP_Solution_Node &x); + + //! Copy constructor, allowing not to copy the constraint system. + PIP_Solution_Node(const PIP_Solution_Node &x, bool empty_constraints); + /*! \brief Populates the parametric simplex tableau using external data, if necessary
@@ -336,6 +352,9 @@ public: bool OK() const;
private: + // only PIP_Solution_Node is allowed to use the constructor and methods. + friend class PIP_Solution_Node; + //! Pointer to the "true" child of \p *this. PIP_Tree_Node* true_child;
@@ -343,40 +362,22 @@ private: PIP_Tree_Node* false_child;
/*! \brief - Constructs if \p cs then \p tcp \p else \p fcp. - - Constructs a decision node controlled by \p cs (which is copied), - with "true" child \p tcp and "false" child \p fcp. - - \param cs - The system of constraints controlling the node. - - \exception std::invalid_argument - Thrown if \p cs contains strict inequalities. - */ - PIP_Decision_Node(const Constraint_System& cs, - PIP_Tree_Node* fcp, PIP_Tree_Node* tcp); - - /*! \brief - Constructs if \p cs then \p tcp \p else \p fcp. + Constructs "if constraints then \p tcp else \p fcp". Initial constraint + set is empty.
- Constructs a decision node controlled by \p cs (which is recycled), + Constructs a decision node, with "true" child \p tcp and "false" child \p fcp.
- \param cs - The system of constraints controlling the node. It is not - declared <CODE>const</CODE> because its data-structures may be - recycled to build the polyhedron. + \param fcp + Pointer to "false" child
- \param dummy - A dummy tag to syntactically differentiate this one - from the other constructors. + \param tcp + Pointer to "true" child
\exception std::invalid_argument Thrown if \p cs contains strict inequalities. */ - PIP_Decision_Node(Constraint_System& cs, Recycle_Input dummy, - PIP_Tree_Node* fcp, PIP_Tree_Node* tcp); + PIP_Decision_Node(PIP_Tree_Node* fcp, PIP_Tree_Node* tcp);
protected: /*! \brief
participants (1)
-
François Galea