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_Scalar_Products_defs_hh
00024 #define PPL_Scalar_Products_defs_hh 1
00025
00026 #include "Scalar_Products.types.hh"
00027 #include "Linear_Row.types.hh"
00028 #include "Coefficient.types.hh"
00029 #include "Linear_Expression.types.hh"
00030 #include "Constraint.types.hh"
00031 #include "Generator.types.hh"
00032 #include "Congruence.types.hh"
00033 #include "Grid_Generator.types.hh"
00034
00035 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00037
00043 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00044 class Parma_Polyhedra_Library::Scalar_Products {
00045 public:
00047 static void assign(Coefficient& z, const Linear_Row& x, const Linear_Row& y);
00049 static void assign(Coefficient& z, const Constraint& c, const Generator& g);
00051 static void assign(Coefficient& z, const Generator& g, const Constraint& c);
00053 static void assign(Coefficient& z,
00054 const Constraint& c, const Grid_Generator& g);
00056 static void assign(Coefficient& z,
00057 const Grid_Generator& g, const Congruence& cg);
00059 static void assign(Coefficient& z,
00060 const Congruence& cg, const Grid_Generator& g);
00061
00063 static int sign(const Linear_Row& x, const Linear_Row& y);
00065 static int sign(const Constraint& c, const Generator& g);
00067 static int sign(const Generator& g, const Constraint& c);
00069 static int sign(const Constraint& c, const Grid_Generator& g);
00070
00076 static void reduced_assign(Coefficient& z,
00077 const Linear_Row& x, const Linear_Row& y);
00083 static void reduced_assign(Coefficient& z,
00084 const Constraint& c, const Generator& g);
00090 static void reduced_assign(Coefficient& z,
00091 const Generator& g, const Constraint& c);
00096 static void reduced_assign(Coefficient& z,
00097 const Grid_Generator& g, const Congruence& cg);
00098
00103 static int reduced_sign(const Linear_Row& x, const Linear_Row& y);
00108 static int reduced_sign(const Constraint& c, const Generator& g);
00113 static int reduced_sign(const Generator& g, const Constraint& c);
00114
00120 static void homogeneous_assign(Coefficient& z,
00121 const Linear_Row& x, const Linear_Row& y);
00127 static void homogeneous_assign(Coefficient& z,
00128 const Linear_Expression& e,
00129 const Generator& g);
00134 static void homogeneous_assign(Coefficient& z,
00135 const Grid_Generator& g, const Constraint& c);
00140 static void homogeneous_assign(Coefficient& z,
00141 const Grid_Generator& g, const Congruence& cg);
00146 static void homogeneous_assign(Coefficient& z,
00147 const Linear_Expression& e,
00148 const Grid_Generator& g);
00149
00154 static int homogeneous_sign(const Linear_Row& x, const Linear_Row& y);
00159 static int homogeneous_sign(const Linear_Expression& e, const Generator& g);
00163 static int homogeneous_sign(const Linear_Expression& e,
00164 const Grid_Generator& g);
00168 static int homogeneous_sign(const Grid_Generator& g, const Constraint& c);
00169 };
00170
00171 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00173
00174 #endif // defined(PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS)
00175 class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign {
00176 public:
00178 Topology_Adjusted_Scalar_Product_Sign(const Constraint& c);
00180 Topology_Adjusted_Scalar_Product_Sign(const Generator& g);
00181
00183 int operator()(const Constraint&, const Generator&) const;
00185 int operator()(const Generator&, const Constraint&) const;
00186
00187 private:
00189 typedef int (*SPS_type)(const Linear_Row&, const Linear_Row&);
00190
00192 SPS_type sps_fp;
00193 };
00194
00195 #include "Scalar_Products.inlines.hh"
00196
00197 #endif // !defined(PPL_Scalar_Products_defs_hh)