[GIT] ppl/ppl(floating_point): Always use Box instead of map for interval abstract stores.

Module: ppl/ppl Branch: floating_point Commit: 230e752faf022e041afa79aa1e7f1a4250a3e0bb URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=230e752faf022...
Author: Fabio Bossi bossi@cs.unipr.it Date: Wed Sep 23 12:24:25 2009 +0200
Always use Box instead of map for interval abstract stores.
---
src/Octagonal_Shape.defs.hh | 1 - src/Octagonal_Shape.templates.hh | 1 - src/Polyhedron.defs.hh | 7 +++---- src/Polyhedron.templates.hh | 16 ++++++++-------- 4 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/src/Octagonal_Shape.defs.hh b/src/Octagonal_Shape.defs.hh index 81ddf92..42166af 100644 --- a/src/Octagonal_Shape.defs.hh +++ b/src/Octagonal_Shape.defs.hh @@ -47,7 +47,6 @@ site: http://www.cs.unipr.it/ppl/ . */ #include "Interval.types.hh" #include "Linear_Form.types.hh" #include <vector> -#include <map> #include <cstddef> #include <climits> #include <iosfwd> diff --git a/src/Octagonal_Shape.templates.hh b/src/Octagonal_Shape.templates.hh index 04906d6..628e791 100644 --- a/src/Octagonal_Shape.templates.hh +++ b/src/Octagonal_Shape.templates.hh @@ -33,7 +33,6 @@ site: http://www.cs.unipr.it/ppl/ . */ #include "Box.defs.hh" #include "assert.hh" #include <vector> -#include <map> #include <deque> #include <string> #include <iostream> diff --git a/src/Polyhedron.defs.hh b/src/Polyhedron.defs.hh index b402794..f2854b4 100644 --- a/src/Polyhedron.defs.hh +++ b/src/Polyhedron.defs.hh @@ -50,7 +50,6 @@ site: http://www.cs.unipr.it/ppl/ . */ #include "Interval.types.hh" #include "Linear_Form.types.hh" #include <vector> -#include <map> #include <iosfwd>
namespace Parma_Polyhedra_Library { @@ -1009,7 +1008,7 @@ public: void refine_with_linear_form_inequality( const Linear_Form< Interval<FP_Format, Interval_Info> >& left, const Linear_Form< Interval<FP_Format, Interval_Info> >& right, - const std::map< dimension_type, Interval<FP_Format, Interval_Info> >& store); + const Box< Interval<FP_Format, Interval_Info> >& store);
//! Refines \p store with the constraints defining \p *this. /*! @@ -1215,7 +1214,7 @@ public: template <typename FP_Format, typename Interval_Info> void affine_image(Variable var, const Linear_Form<Interval <FP_Format, Interval_Info> >& lf, - const std::map< dimension_type, Interval<FP_Format, Interval_Info> >& store); + const Box< Interval<FP_Format, Interval_Info> >& store);
/*! \brief Assigns to \p *this the @@ -2661,7 +2660,7 @@ protected: static void overapproximate_linear_form( const Linear_Form<Interval <FP_Format, Interval_Info> >& lf, const dimension_type lf_dimension, - const std::map< dimension_type, Interval<FP_Format, Interval_Info> >& store, + const Box< Interval<FP_Format, Interval_Info> >& store, Linear_Form<Interval <FP_Format, Interval_Info> >& result);
/*! \brief diff --git a/src/Polyhedron.templates.hh b/src/Polyhedron.templates.hh index c312028..ed58841 100644 --- a/src/Polyhedron.templates.hh +++ b/src/Polyhedron.templates.hh @@ -28,7 +28,6 @@ site: http://www.cs.unipr.it/ppl/ . */ #include "Interval.defs.hh" #include "Linear_Form.defs.hh" #include <algorithm> -#include <map> #include <deque>
namespace Parma_Polyhedra_Library { @@ -301,7 +300,7 @@ void Polyhedron::refine_with_linear_form_inequality( const Linear_Form< Interval<FP_Format, Interval_Info> >& left, const Linear_Form< Interval<FP_Format, Interval_Info> >& right, - const std::map< dimension_type, Interval<FP_Format, Interval_Info> >& store) { + const Box< Interval<FP_Format, Interval_Info> >& store) {
// Check that FP_Format is indeed a floating point type. PPL_COMPILE_TIME_CHECK(!std::numeric_limits<FP_Format>::is_exact, @@ -347,7 +346,7 @@ template <typename FP_Format, typename Interval_Info> void Polyhedron::affine_image(const Variable var, const Linear_Form<Interval <FP_Format, Interval_Info> >& lf, -const std::map< dimension_type, Interval<FP_Format, Interval_Info> >& store) { +const Box< Interval<FP_Format, Interval_Info> >& store) {
// Check that FP_Format is indeed a floating point type. PPL_COMPILE_TIME_CHECK(!std::numeric_limits<FP_Format>::is_exact, @@ -392,7 +391,7 @@ void Polyhedron::overapproximate_linear_form( const Linear_Form<Interval <FP_Format, Interval_Info> >& lf, const dimension_type lf_dimension, - const std::map< dimension_type, Interval<FP_Format, Interval_Info> >& store, + const Box< Interval<FP_Format, Interval_Info> >& store, Linear_Form<Interval <FP_Format, Interval_Info> >& result) {
// Check that FP_Format is indeed a floating point type. @@ -400,9 +399,11 @@ Polyhedron::overapproximate_linear_form( "Polyhedron::overapproximate_linear_form:" " FP_Format not a floating point type.");
+ PPL_ASSERT(lf_dimension <= store.space_dimension()); + typedef Interval<FP_Format, Interval_Info> FP_Interval_Type; typedef Linear_Form<FP_Interval_Type> FP_Linear_Form; - typedef std::map<dimension_type, FP_Interval_Type> Interval_Abstract_Store; + typedef Box<FP_Interval_Type> Interval_Abstract_Store;
result = FP_Linear_Form(lf.inhomogeneous_term()); // FIXME: this may not be policy-neutral. @@ -416,11 +417,10 @@ Polyhedron::overapproximate_linear_form( FP_Format curr_lb = curr_coeff.lower(); FP_Format curr_ub = curr_coeff.upper(); if (curr_lb != 0 || curr_ub != 0) { - typename Interval_Abstract_Store::const_iterator i_ite = store.find(i); - PPL_ASSERT(i_ite != store.end()); + const FP_Interval_Type& curr_int = store.get_iterval(Variable(i)); FP_Interval_Type curr_addend(curr_ub - curr_lb); curr_addend *= aux_divisor2; - curr_addend *= i_ite->second; + curr_addend *= curr_int; result += curr_addend; curr_addend = FP_Interval_Type(curr_lb + curr_ub); curr_addend *= aux_divisor1;
participants (1)
-
Fabio Bossi