[PPL-devel] [GIT] ppl/ppl(master): Renamed Box methods get_{upper, lower}_bound() as has_{upper, lower}_bound().

Enea Zaffanella zaffanella at cs.unipr.it
Thu Mar 8 13:03:31 CET 2012


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

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Thu Mar  8 13:01:20 2012 +0100

Renamed Box methods get_{upper,lower}_bound() as has_{upper,lower}_bound().
Improved documentation: in particular, make clearer that undefined behavior
is obtained when calling them on an empty box.

---

 src/Box.defs.hh             |   77 +++++++++++++++++++++++-------------------
 src/Box.inlines.hh          |    8 ++--
 src/Box.templates.hh        |   10 +++---
 src/Grid.templates.hh       |    4 +-
 src/Polyhedron.templates.hh |    8 ++--
 5 files changed, 57 insertions(+), 50 deletions(-)

diff --git a/src/Box.defs.hh b/src/Box.defs.hh
index cde52d0..4b5a4e3 100644
--- a/src/Box.defs.hh
+++ b/src/Box.defs.hh
@@ -1630,48 +1630,55 @@ public:
   void set_interval(Variable var, const ITV& i);
 
   /*! \brief
-    If the <CODE>k</CODE>-th space dimension is unbounded below, returns
-    <CODE>false</CODE>. Otherwise returns <CODE>true</CODE> and set
+    If the <CODE>k</CODE>-th space dimension is unbounded below, return
+    <CODE>false</CODE>. Otherwise return <CODE>true</CODE> and set
     \p closed, \p n and \p d accordingly.
 
-    Let \f$I\f$ the interval corresponding to the <CODE>k</CODE>-th
-    space dimension.  If \f$I\f$ is not bounded from below, simply return
-    <CODE>false</CODE>.  Otherwise, set <CODE>closed</CODE>,
-    <CODE>n</CODE> and <CODE>d</CODE> as follows: <CODE>closed</CODE>
-    is set to <CODE>true</CODE> if the the lower boundary of \f$I\f$
-    is closed and is set to <CODE>false</CODE> otherwise;
-    <CODE>n</CODE> and <CODE>d</CODE> are assigned the integers
-    \f$n\f$ and \f$d\f$ such that the canonical fraction \f$n/d\f$
-    corresponds to the greatest lower bound of \f$I\f$.  The fraction
-    \f$n/d\f$ is in canonical form if and only if \f$n\f$ and \f$d\f$
-    have no common factors and \f$d\f$ is positive, \f$0/1\f$ being
-    the unique representation for zero.
-
-    An undefined behavior is obtained if \p k is greater than
-    or equal to the space dimension of \p *this.
-  */
-  bool get_lower_bound(dimension_type k, bool& closed,
+    \note
+    It is assumed that <CODE>*this</CODE> is a non-empty box
+    having space dimension greater than \p k. An undefined behavior
+    is obtained if this assumption is not met.
+
+    Let \f$I\f$ be the interval corresponding to the <CODE>k</CODE>-th
+    space dimension of the non-empty box <CODE>*this</CODE>.
+    If \f$I\f$ is not bounded from below, simply return <CODE>false</CODE>
+    (leaving all other parameters unchanged).
+    Otherwise, set \p closed, \p n and \p d as follows:
+     - \p closed is set to <CODE>true</CODE> if and only if the lower
+       boundary of \f$I\f$ is closed (i.e., it is included in the interval);
+     - \p n and \p d are assigned the integers \f$n\f$ and \f$d\f$ such
+       that the fraction \f$n/d\f$ corresponds to the greatest lower bound
+       of \f$I\f$. The fraction \f$n/d\f$ is in canonical form, meaning
+       that \f$n\f$ and \f$d\f$ have no common factors, \f$d\f$ is positive,
+       and if \f$n\f$ is zero then \f$d\f$ is one.
+  */
+  bool has_lower_bound(dimension_type k, bool& closed,
 		       Coefficient& n, Coefficient& d) const;
 
   /*! \brief
-    If the <CODE>k</CODE>-th space dimension is unbounded above, returns
-    <CODE>false</CODE>. Otherwise returns <CODE>true</CODE> and set
+    If the <CODE>k</CODE>-th space dimension is unbounded above, return
+    <CODE>false</CODE>. Otherwise return <CODE>true</CODE> and set
     \p closed, \p n and \p d accordingly.
 
-    Let \f$I\f$ the interval corresponding to the <CODE>k</CODE>-th
-    space dimension.  If \f$I\f$ is not bounded from above, simply return
-    <CODE>false</CODE>.  Otherwise, set <CODE>closed</CODE>,
-    <CODE>n</CODE> and <CODE>d</CODE> as follows: <CODE>closed</CODE>
-    is set to <CODE>true</CODE> if the the upper boundary of \f$I\f$
-    is closed and is set to <CODE>false</CODE> otherwise;
-    <CODE>n</CODE> and <CODE>d</CODE> are assigned the integers
-    \f$n\f$ and \f$d\f$ such that the canonical fraction \f$n/d\f$
-    corresponds to the least upper bound of \f$I\f$.
-
-    An undefined behavior is obtained if \p k is greater than
-    or equal to the space dimension of \p *this.
-  */
-  bool get_upper_bound(dimension_type k, bool& closed,
+    \note
+    It is assumed that <CODE>*this</CODE> is a non-empty box
+    having space dimension greater than \p k. An undefined behavior
+    is obtained if this assumption is not met.
+
+    Let \f$I\f$ be the interval corresponding to the <CODE>k</CODE>-th
+    space dimension of the non-empty box <CODE>*this</CODE>.
+    If \f$I\f$ is not bounded from above, simply return <CODE>false</CODE>
+    (leaving all other parameters unchanged).
+    Otherwise, set \p closed, \p n and \p d as follows:
+     - \p closed is set to <CODE>true</CODE> if and only if the upper
+       boundary of \f$I\f$ is closed (i.e., it is included in the interval);
+     - \p n and \p d are assigned the integers \f$n\f$ and \f$d\f$ such
+       that the fraction \f$n/d\f$ corresponds to the least upper bound
+       of \f$I\f$. The fraction \f$n/d\f$ is in canonical form, meaning
+       that \f$n\f$ and \f$d\f$ have no common factors, \f$d\f$ is positive,
+       and if \f$n\f$ is zero then \f$d\f$ is one.
+  */
+  bool has_upper_bound(dimension_type k, bool& closed,
 		       Coefficient& n, Coefficient& d) const;
 
   //! Returns a system of constraints defining \p *this.
diff --git a/src/Box.inlines.hh b/src/Box.inlines.hh
index b38e30f..8d0790c 100644
--- a/src/Box.inlines.hh
+++ b/src/Box.inlines.hh
@@ -264,9 +264,9 @@ operator!=(const Box<ITV>& x, const Box<ITV>& y) {
 
 template <typename ITV>
 inline bool
-Box<ITV>::get_lower_bound(const dimension_type k, bool& closed,
+Box<ITV>::has_lower_bound(const dimension_type k, bool& closed,
                           Coefficient& n, Coefficient& d) const {
-  PPL_ASSERT(k < seq.size());
+  PPL_ASSERT(!is_empty() && k < seq.size());
   const ITV& seq_k = seq[k];
 
   if (seq_k.lower_is_boundary_infinity())
@@ -284,9 +284,9 @@ Box<ITV>::get_lower_bound(const dimension_type k, bool& closed,
 
 template <typename ITV>
 inline bool
-Box<ITV>::get_upper_bound(const dimension_type k, bool& closed,
+Box<ITV>::has_upper_bound(const dimension_type k, bool& closed,
                           Coefficient& n, Coefficient& d) const {
-  PPL_ASSERT(k < seq.size());
+  PPL_ASSERT(!is_empty() && k < seq.size());
   const ITV& seq_k = seq[k];
 
   if (seq_k.upper_is_boundary_infinity())
diff --git a/src/Box.templates.hh b/src/Box.templates.hh
index dc8bbd9..262e002 100644
--- a/src/Box.templates.hh
+++ b/src/Box.templates.hh
@@ -3873,13 +3873,13 @@ Box<ITV>::constraints() const {
       bool closed = false;
       PPL_DIRTY_TEMP(Coefficient, n);
       PPL_DIRTY_TEMP(Coefficient, d);
-      if (get_lower_bound(k, closed, n, d)) {
+      if (has_lower_bound(k, closed, n, d)) {
 	if (closed)
 	  cs.insert(d*Variable(k) >= n);
 	else
 	  cs.insert(d*Variable(k) > n);
       }
-      if (get_upper_bound(k, closed, n, d)) {
+      if (has_upper_bound(k, closed, n, d)) {
 	if (closed)
 	  cs.insert(d*Variable(k) <= n);
 	else
@@ -3911,7 +3911,7 @@ Box<ITV>::minimized_constraints() const {
       bool closed = false;
       PPL_DIRTY_TEMP(Coefficient, n);
       PPL_DIRTY_TEMP(Coefficient, d);
-      if (get_lower_bound(k, closed, n, d)) {
+      if (has_lower_bound(k, closed, n, d)) {
 	if (closed)
 	  // Make sure equality constraints are detected.
 	  if (seq[k].is_singleton()) {
@@ -3923,7 +3923,7 @@ Box<ITV>::minimized_constraints() const {
 	else
 	  cs.insert(d*Variable(k) > n);
       }
-      if (get_upper_bound(k, closed, n, d)) {
+      if (has_upper_bound(k, closed, n, d)) {
 	if (closed)
 	  cs.insert(d*Variable(k) <= n);
 	else
@@ -3955,7 +3955,7 @@ Box<ITV>::congruences() const {
       bool closed = false;
       PPL_DIRTY_TEMP(Coefficient, n);
       PPL_DIRTY_TEMP(Coefficient, d);
-      if (get_lower_bound(k, closed, n, d) && closed)
+      if (has_lower_bound(k, closed, n, d) && closed)
 	  // Make sure equality congruences are detected.
 	  if (seq[k].is_singleton())
 	    cgs.insert((d*Variable(k) %= n) / 0);
diff --git a/src/Grid.templates.hh b/src/Grid.templates.hh
index 8145c54..bc188ce 100644
--- a/src/Grid.templates.hh
+++ b/src/Grid.templates.hh
@@ -67,8 +67,8 @@ Grid::Grid(const Box<Interval>& box, Complexity_Class)
       // gen_sys.insert() at the end of the loop.
       bool closed = false;
       // TODO: Consider producing the system(s) in minimized form.
-      if (box.get_lower_bound(k, closed, l_n, l_d)) {
-	if (box.get_upper_bound(k, closed, u_n, u_d))
+      if (box.has_lower_bound(k, closed, l_n, l_d)) {
+	if (box.has_upper_bound(k, closed, u_n, u_d))
 	  if (l_n * u_d == u_n * l_d) {
             Grid_Generator& point = gen_sys[0];
 	    // A point interval sets dimension k of every point to a
diff --git a/src/Polyhedron.templates.hh b/src/Polyhedron.templates.hh
index 51e7d25..015d70a 100644
--- a/src/Polyhedron.templates.hh
+++ b/src/Polyhedron.templates.hh
@@ -72,10 +72,10 @@ Polyhedron::Polyhedron(Topology topol,
     for (dimension_type k = space_dim; k-- > 0; ) {
       // See if we have a valid lower bound.
       bool l_closed = false;
-      bool l_bounded = box.get_lower_bound(k, l_closed, l_n, l_d);
+      bool l_bounded = box.has_lower_bound(k, l_closed, l_n, l_d);
       // See if we have a valid upper bound.
       bool u_closed = false;
-      bool u_bounded = box.get_upper_bound(k, u_closed, u_n, u_d);
+      bool u_bounded = box.has_upper_bound(k, u_closed, u_n, u_d);
 
       // See if we have an implicit equality constraint.
       if (l_bounded && u_bounded
@@ -99,10 +99,10 @@ Polyhedron::Polyhedron(Topology topol,
     for (dimension_type k = space_dim; k-- > 0; ) {
       // See if we have a valid lower bound.
       bool l_closed = false;
-      bool l_bounded = box.get_lower_bound(k, l_closed, l_n, l_d);
+      bool l_bounded = box.has_lower_bound(k, l_closed, l_n, l_d);
       // See if we have a valid upper bound.
       bool u_closed = false;
-      bool u_bounded = box.get_upper_bound(k, u_closed, u_n, u_d);
+      bool u_bounded = box.has_upper_bound(k, u_closed, u_n, u_d);
 
       // See if we have an implicit equality constraint.
       if (l_bounded && u_bounded




More information about the PPL-devel mailing list