[PPL-devel] [GIT] ppl/ppl(products): Added new method frequency() for Grids.
Patricia Hill
p.m.hill at leeds.ac.uk
Thu May 14 08:57:02 CEST 2009
Module: ppl/ppl
Branch: products
Commit: c7f4b16d84c83be74fb0e62080e2d22b51d170a6
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=c7f4b16d84c83be74fb0e62080e2d22b51d170a6
Author: Patricia Hill <p.m.hill at leeds.ac.uk>
Date: Thu May 14 07:41:22 2009 +0100
Added new method frequency() for Grids.
---
src/Grid.defs.hh | 33 +++++++++++++++++++++++++++++++++
src/Grid_public.cc | 26 ++++++++++++++++++++++++++
tests/Grid/Makefile.am | 3 +++
3 files changed, 62 insertions(+), 0 deletions(-)
diff --git a/src/Grid.defs.hh b/src/Grid.defs.hh
index 3049c31..0ad5277 100644
--- a/src/Grid.defs.hh
+++ b/src/Grid.defs.hh
@@ -861,6 +861,39 @@ public:
Coefficient& inf_n, Coefficient& inf_d, bool& minimum,
Generator& point) const;
+ /*! \brief
+ Returns <CODE>true</CODE> if and only if \p *this is not empty and
+ \p expr is discrete in \p *this, in which case the maximum frequency
+ and the value for \p expr that is closest to zero are computed.
+
+ \param expr
+ The linear expression for which the frequency is needed;
+
+ \param freq_n
+ The numerator of the maximum frequency of \p expr;
+
+ \param freq_d
+ The denominator of the maximum frequency of \p expr;
+
+ \param val_n
+ The numerator of a value of \p expr at a point in the grid
+ that is closest to zero;
+
+ \param val_d
+ The denominator of a value of \p expr at a point in the grid
+ that is closest to zero;
+
+ \exception std::invalid_argument
+ Thrown if \p expr and \p *this are dimension-incompatible.
+
+ If \p *this is empty or \p expr can take any real number in \p *this,
+ <CODE>false</CODE> is returned and \p freq_n, \p freq_d,
+ \p val_n and \p val_d are left untouched.
+ */
+ bool frequency(const Linear_Expression& expr,
+ Coefficient& freq_n, Coefficient& freq_d,
+ Coefficient& val_n, Coefficient& val_d) const;
+
//! Returns <CODE>true</CODE> if and only if \p *this contains \p y.
/*!
\exception std::invalid_argument
diff --git a/src/Grid_public.cc b/src/Grid_public.cc
index 16e6ba9..24a53f6 100644
--- a/src/Grid_public.cc
+++ b/src/Grid_public.cc
@@ -2475,6 +2475,32 @@ PPL::Grid::time_elapse_assign(const Grid& y) {
assert(x.OK(true) && y.OK(true));
}
+bool
+PPL::Grid::frequency(const Linear_Expression& expr,
+ Coefficient& freq_n, Coefficient& freq_d,
+ Coefficient& val_n, Coefficient& val_d) const {
+ // The dimension of `expr' must be at most the dimension of *this.
+ if (space_dim < expr.space_dimension())
+ throw_dimension_incompatible("frequency(e, ...)", "e", expr);
+
+ // Space dimension = 0: if empty, then return false;
+ // otherwise the frequency is 1 and the value is 0
+ if (space_dim == 0) {
+ if (is_empty())
+ return false;
+ freq_n = 0;
+ freq_d = 1;
+ val_n = 0;
+ val_d = 1;
+ return true;
+ }
+ if (!generators_are_minimized() && !minimize())
+ // Minimizing found `this' empty.
+ return false;
+
+ return frequency_no_check(expr, freq_n, freq_d, val_n, val_d);
+}
+
/*! \relates Parma_Polyhedra_Library::Grid */
bool
PPL::operator==(const Grid& x, const Grid& y) {
diff --git a/tests/Grid/Makefile.am b/tests/Grid/Makefile.am
index 7189082..74bab01 100644
--- a/tests/Grid/Makefile.am
+++ b/tests/Grid/Makefile.am
@@ -81,6 +81,7 @@ disjoint1 \
equals1 \
expandspacedim1 \
foldspacedims1 \
+frequency1 \
frombdshape1 \
frombox1 \
fromgrid1 \
@@ -191,6 +192,8 @@ equals1_SOURCES = equals1.cc
expandspacedim1_SOURCES = expandspacedim1.cc
+frequency1_SOURCES = frequency1.cc
+
frombdshape1_SOURCES = frombdshape1.cc
frombox1_SOURCES = frombox1.cc
More information about the PPL-devel
mailing list