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 // 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 Grid_Generator& g, const Congruence& cg);
00056 static void assign(Coefficient& z,
00057 const Congruence& cg, const Grid_Generator& g);
00058
00060 static int sign(const Linear_Row& x, const Linear_Row& y);
00062 static int sign(const Constraint& c, const Generator& g);
00064 static int sign(const Generator& g, const Constraint& c);
00065
00071 static void reduced_assign(Coefficient& z,
00072 const Linear_Row& x, const Linear_Row& y);
00078 static void reduced_assign(Coefficient& z,
00079 const Constraint& c, const Generator& g);
00085 static void reduced_assign(Coefficient& z,
00086 const Generator& g, const Constraint& c);
00091 static void reduced_assign(Coefficient& z,
00092 const Grid_Generator& g, const Congruence& cg);
00093
00098 static int reduced_sign(const Linear_Row& x, const Linear_Row& y);
00103 static int reduced_sign(const Constraint& c, const Generator& g);
00108 static int reduced_sign(const Generator& g, const Constraint& c);
00109
00115 static void homogeneous_assign(Coefficient& z,
00116 const Linear_Row& x, const Linear_Row& y);
00122 static void homogeneous_assign(Coefficient& z,
00123 const Linear_Expression& e,
00124 const Generator& g);
00129 static void homogeneous_assign(Coefficient& z,
00130 const Grid_Generator& g, const Congruence& cg);
00135 static void homogeneous_assign(Coefficient& z,
00136 const Linear_Expression& e,
00137 const Grid_Generator& g);
00138
00143 static int homogeneous_sign(const Linear_Row& x, const Linear_Row& y);
00148 static int homogeneous_sign(const Linear_Expression& e, const Generator& g);
00152 static int homogeneous_sign(const Linear_Expression& e,
00153 const Grid_Generator& g);
00154 };
00155
00156 #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00158
00159 #endif // PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS
00160 class Parma_Polyhedra_Library::Topology_Adjusted_Scalar_Product_Sign {
00161 public:
00163 Topology_Adjusted_Scalar_Product_Sign(const Constraint& c);
00165 Topology_Adjusted_Scalar_Product_Sign(const Generator& g);
00166
00168 int operator()(const Constraint&, const Generator&) const;
00170 int operator()(const Generator&, const Constraint&) const;
00171
00172 private:
00174 typedef int (*SPS_type)(const Linear_Row&, const Linear_Row&);
00175
00177 SPS_type sps_fp;
00178 };
00179
00180 #include "Scalar_Products.inlines.hh"
00181
00182 #endif // !defined(PPL_Scalar_Products_defs_hh)