[GIT] ppl/ppl(floating_point): Made the refine_fp_interval_abstract_store methods inline.

Module: ppl/ppl Branch: floating_point Commit: 8128edd2954e9c4f63f9fea8bce387a2310c1183 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=8128edd2954e9...
Author: Fabio Bossi bossi@cs.unipr.it Date: Wed Sep 23 17:01:36 2009 +0200
Made the refine_fp_interval_abstract_store methods inline.
---
src/Octagonal_Shape.inlines.hh | 17 +++++++++++++++++ src/Octagonal_Shape.templates.hh | 21 --------------------- src/Polyhedron.inlines.hh | 16 ++++++++++++++++ src/Polyhedron.templates.hh | 20 -------------------- 4 files changed, 33 insertions(+), 41 deletions(-)
diff --git a/src/Octagonal_Shape.inlines.hh b/src/Octagonal_Shape.inlines.hh index b76c327..cee791c 100644 --- a/src/Octagonal_Shape.inlines.hh +++ b/src/Octagonal_Shape.inlines.hh @@ -612,6 +612,23 @@ Octagonal_Shape<T>::strictly_contains(const Octagonal_Shape& y) const { return x.contains(y) && !y.contains(x); }
+template <typename T> +template <typename Interval_Info> +inline void +Octagonal_Shape<T>:: +refine_fp_interval_abstract_store( + Box< Interval<T, Interval_Info> >& store) const { + + // Check that T is a floating point type. + PPL_COMPILE_TIME_CHECK(!std::numeric_limits<T>::is_exact, + "Octagonal_Shape<T>::refine_fp_interval_abstract_store:" + " T not a floating point type."); + + typedef Interval<T, Interval_Info> FP_Interval_Type; + store.intersection_assign(Box<FP_Interval_Type>(*this)); + +} + /*! \relates Octagonal_Shape */ template <typename Temp, typename To, typename T> inline bool diff --git a/src/Octagonal_Shape.templates.hh b/src/Octagonal_Shape.templates.hh index 628e791..92f93f6 100644 --- a/src/Octagonal_Shape.templates.hh +++ b/src/Octagonal_Shape.templates.hh @@ -30,7 +30,6 @@ site: http://www.cs.unipr.it/ppl/ . */ #include "Interval.defs.hh" #include "Linear_Form.defs.hh" #include "meta_programming.hh" -#include "Box.defs.hh" #include "assert.hh" #include <vector> #include <deque> @@ -856,7 +855,6 @@ Octagonal_Shape<T>::refine_with_linear_form_inequality( }
PPL_ASSERT(OK()); - }
template <typename T> @@ -5303,7 +5301,6 @@ Octagonal_Shape<T>::affine_image(const Variable var, assign_r(matrix[n_var][n_var+1], minus_lf_ub, ROUND_NOT_NEEDED);
PPL_ASSERT(OK()); - }
template <typename T> @@ -5418,24 +5415,6 @@ interval_coefficient_upper_bound(const N& var_ub, const N& minus_var_ub, assign_r(result, std::max(result, second_comparison_term), ROUND_NOT_NEEDED); assign_r(result, std::max(result, third_comparison_term), ROUND_NOT_NEEDED); assign_r(result, std::max(result, fourth_comparison_term), ROUND_NOT_NEEDED); - -} - -template <typename T> -template <typename Interval_Info> -void -Octagonal_Shape<T>:: -refine_fp_interval_abstract_store( - Box< Interval<T, Interval_Info> >& store) const { - - // Check that T is a floating point type. - PPL_COMPILE_TIME_CHECK(!std::numeric_limits<T>::is_exact, - "Octagonal_Shape<T>::refine_fp_interval_abstract_store:" - " T not a floating point type."); - - typedef Interval<T, Interval_Info> FP_Interval_Type; - store.intersection_assign(Box<FP_Interval_Type>(*this)); - }
template <typename T> diff --git a/src/Polyhedron.inlines.hh b/src/Polyhedron.inlines.hh index d20eaf5..5de0af8 100644 --- a/src/Polyhedron.inlines.hh +++ b/src/Polyhedron.inlines.hh @@ -372,6 +372,22 @@ Polyhedron::add_recycled_congruences(Congruence_System& cgs) { add_congruences(cgs); }
+template <typename FP_Format, typename Interval_Info> +inline void +Polyhedron:: +refine_fp_interval_abstract_store( + Box< Interval<FP_Format, Interval_Info> >& store) const { + + // Check that FP_Format is indeed a floating point type. + PPL_COMPILE_TIME_CHECK(!std::numeric_limits<FP_Format>::is_exact, + "Polyhedron::refine_fp_interval_abstract_store:" + " T not a floating point type."); + + typedef Interval<FP_Format, Interval_Info> FP_Interval_Type; + store.intersection_assign(Box<FP_Interval_Type>(*this)); + +} + /*! \relates Polyhedron */ inline bool operator!=(const Polyhedron& x, const Polyhedron& y) { diff --git a/src/Polyhedron.templates.hh b/src/Polyhedron.templates.hh index ed58841..880d88b 100644 --- a/src/Polyhedron.templates.hh +++ b/src/Polyhedron.templates.hh @@ -339,7 +339,6 @@ Polyhedron::refine_with_linear_form_inequality(
// Finally, do the refinement. refine_with_constraint(lf_approx_le <= 0); - }
template <typename FP_Format, typename Interval_Info> @@ -383,7 +382,6 @@ const Box< Interval<FP_Format, Interval_Info> >& store) {
// Finally, do the assignment. bounded_affine_image(var, lf_approx_le + lo_coeff, lf_approx_le + hi_coeff); - }
template <typename FP_Format, typename Interval_Info> @@ -403,7 +401,6 @@ Polyhedron::overapproximate_linear_form(
typedef Interval<FP_Format, Interval_Info> FP_Interval_Type; typedef Linear_Form<FP_Interval_Type> FP_Linear_Form; - typedef Box<FP_Interval_Type> Interval_Abstract_Store;
result = FP_Linear_Form(lf.inhomogeneous_term()); // FIXME: this may not be policy-neutral. @@ -429,7 +426,6 @@ Polyhedron::overapproximate_linear_form( result += curr_addend_lf; } } - }
template <typename FP_Format, typename Interval_Info> @@ -539,22 +535,6 @@ Polyhedron::convert_to_integer_expressions( res_hi_coeff = Coefficient(0); }
-template <typename FP_Format, typename Interval_Info> -void -Polyhedron:: -refine_fp_interval_abstract_store( - Box< Interval<FP_Format, Interval_Info> >& store) const { - - // Check that FP_Format is indeed a floating point type. - PPL_COMPILE_TIME_CHECK(!std::numeric_limits<FP_Format>::is_exact, - "Polyhedron::refine_fp_interval_abstract_store:" - " T not a floating point type."); - - typedef Interval<FP_Format, Interval_Info> FP_Interval_Type; - store.intersection_assign(Box<FP_Interval_Type>(*this)); - -} - template <typename C> void Polyhedron::throw_dimension_incompatible(const char* method,
participants (1)
-
Fabio Bossi