00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef PPL_Widening_Function_defs_hh
00024 #define PPL_Widening_Function_defs_hh 1
00025
00026 #include "Widening_Function.types.hh"
00027 #include "Constraint_System.types.hh"
00028
00029 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00031
00032 #endif // PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00033 template <typename PH>
00034 class Parma_Polyhedra_Library::Widening_Function {
00035 public:
00037 typedef void (PH::* Widening_Method)(const PH&, unsigned*);
00038
00040 explicit
00041 Widening_Function(Widening_Method wm);
00042
00044
00048 void operator()(PH& x, const PH& y, unsigned* tp = 0) const;
00049
00050 private:
00052 Widening_Method w_method;
00053 };
00054
00055
00056 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00058
00059 #endif // PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00060 template <typename PH, typename CS>
00061 class Parma_Polyhedra_Library::Limited_Widening_Function {
00062 public:
00064 typedef void (PH::* Limited_Widening_Method)(const PH&,
00065 const CS&,
00066 unsigned*);
00067
00069
00076 Limited_Widening_Function(Limited_Widening_Method lwm,
00077 const CS& cs);
00078
00080
00085 void operator()(PH& x, const PH& y, unsigned* tp = 0) const;
00086
00087 private:
00089 Limited_Widening_Method lw_method;
00091 const CS& limiting_cs;
00092 };
00093
00094 namespace Parma_Polyhedra_Library {
00095
00097
00103 template <typename PH>
00104 Widening_Function<PH>
00105 widen_fun_ref(void (PH::* wm)(const PH&, unsigned*));
00106
00108
00117 template <typename PH, typename CS>
00118 Limited_Widening_Function<PH, CS>
00119 widen_fun_ref(void (PH::* lwm)(const PH&, const CS&, unsigned*),
00120 const CS& cs);
00121
00122 }
00123
00124 #include "Widening_Function.inlines.hh"
00125
00126 #endif // !defined(PPL_Widening_Function_defs_hh)