00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef PPL_Widening_Function_defs_hh
00025 #define PPL_Widening_Function_defs_hh 1
00026
00027 #include "Widening_Function.types.hh"
00028 #include "Constraint_System.types.hh"
00029
00030 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00031
00032
00033 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00034 template <typename PSET>
00035 class Parma_Polyhedra_Library::Widening_Function {
00036 public:
00038 typedef void (PSET::* Widening_Method)(const PSET&, unsigned*);
00039
00041 explicit
00042 Widening_Function(Widening_Method wm);
00043
00045
00049 void operator()(PSET& x, const PSET& y, unsigned* tp = 0) const;
00050
00051 private:
00053 Widening_Method w_method;
00054 };
00055
00056
00057 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00058
00059
00060 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00061 template <typename PSET, typename CSYS>
00062 class Parma_Polyhedra_Library::Limited_Widening_Function {
00063 public:
00065 typedef void (PSET::* Limited_Widening_Method)(const PSET&,
00066 const CSYS&,
00067 unsigned*);
00068
00070
00077 Limited_Widening_Function(Limited_Widening_Method lwm,
00078 const CSYS& cs);
00079
00081
00086 void operator()(PSET& x, const PSET& y, unsigned* tp = 0) const;
00087
00088 private:
00090 Limited_Widening_Method lw_method;
00092 const CSYS& limiting_cs;
00093 };
00094
00095 namespace Parma_Polyhedra_Library {
00096
00098
00104 template <typename PSET>
00105 Widening_Function<PSET>
00106 widen_fun_ref(void (PSET::* wm)(const PSET&, unsigned*));
00107
00109
00118 template <typename PSET, typename CSYS>
00119 Limited_Widening_Function<PSET, CSYS>
00120 widen_fun_ref(void (PSET::* lwm)(const PSET&, const CSYS&, unsigned*),
00121 const CSYS& cs);
00122
00123 }
00124
00125 #include "Widening_Function.inlines.hh"
00126
00127 #endif // !defined(PPL_Widening_Function_defs_hh)