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_Scalar_Products_defs_hh
00025 #define PPL_Scalar_Products_defs_hh 1
00026
00027 #include "Scalar_Products.types.hh"
00028 #include "Linear_Row.types.hh"
00029 #include "Coefficient.types.hh"
00030 #include "Linear_Expression.types.hh"
00031 #include "Constraint.types.hh"
00032 #include "Generator.types.hh"
00033 #include "Congruence.types.hh"
00034 #include "Grid_Generator.types.hh"
00035
00036 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00037
00038
00044 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00045 class Parma_Polyhedra_Library::Scalar_Products {
00046 public:
00048 static void assign(Coefficient& z, const Linear_Row& x, const Linear_Row& y);
00050 static void assign(Coefficient& z, const Constraint& c, const Generator& g);
00052 static void assign(Coefficient& z, const Generator& g, const Constraint& c);
00054 static void assign(Coefficient& z,
00055 const Constraint& c, const Grid_Generator& g);
00057 static void assign(Coefficient& z,
00058 const Grid_Generator& g, const Congruence& cg);
00060 static void assign(Coefficient& z,
00061 const Congruence& cg, const Grid_Generator& g);
00062
00064 static int sign(const Linear_Row& x, const Linear_Row& y);
00066 static int sign(const Constraint& c, const Generator& g);
00068 static int sign(const Generator& g, const Constraint& c);
00070 static int sign(const Constraint& c, const Grid_Generator& g);
00071
00077 static void reduced_assign(Coefficient& z,
00078 const Linear_Row& x, const Linear_Row& y);
00084 static void reduced_assign(Coefficient& z,
00085 const Constraint& c, const Generator& g);
00091 static void reduced_assign(Coefficient& z,
00092 const Generator& g, const Constraint& c);
00097 static void reduced_assign(Coefficient& z,
00098 const Grid_Generator& g, const Congruence& cg);
00099
00104 static int reduced_sign(const Linear_Row& x, const Linear_Row& y);
00109 static int reduced_sign(const Constraint& c, const Generator& g);
00114 static int reduced_sign(const Generator& g, const Constraint& c);
00115
00121 static void homogeneous_assign(Coefficient& z,
00122 const Linear_Row& x, const Linear_Row& y);
00128 static void homogeneous_assign(Coefficient& z,
00129 const Linear_Expression& e,
00130 const Generator& g);
00135 static void homogeneous_assign(Coefficient& z,
00136 const Grid_Generator& g, const Constraint& c);
00141 static void homogeneous_assign(Coefficient& z,
00142 const Grid_Generator& g, const Congruence& cg);
00147 static void homogeneous_assign(Coefficient& z,
00148 const Linear_Expression& e,
00149 const Grid_Generator& g);
00150
00155 static int homogeneous_sign(const Linear_Row& x, const Linear_Row& y);
00160 static int homogeneous_sign(const Linear_Expression& e, const Generator& g);
00164 static int homogeneous_sign(const Linear_Expression& e,
00165 const Grid_Generator& g);
00169 static int homogeneous_sign(const Grid_Generator& g, const Constraint& c);
00170 };
00171
00172 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00173
00174
00175 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00176 class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign {
00177 public:
00179 Topology_Adjusted_Scalar_Product_Sign(const Constraint& c);
00181 Topology_Adjusted_Scalar_Product_Sign(const Generator& g);
00182
00184 int operator()(const Constraint&, const Generator&) const;
00186 int operator()(const Generator&, const Constraint&) const;
00187
00188 private:
00190 typedef int (*SPS_type)(const Linear_Row&, const Linear_Row&);
00191
00193 SPS_type sps_fp;
00194 };
00195
00196 #include "Scalar_Products.inlines.hh"
00197
00198 #endif // !defined(PPL_Scalar_Products_defs_hh)