00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 # ifndef shape_semialgebraic_set_hpp
00014 # define shape_semialgebraic_set_hpp
00015
00016 # include <shape/algebraic_set.hpp>
00017 # define TMPL template<class K>
00018 # define SemialgebraicSet semialgebraic_set<K>
00019
00020 namespace mmx {
00021
00022 namespace shape {
00023 TMPL struct semialgebraic_set_def {
00024 typedef typename algebraic_set_def<K>::Polynomial Polynomial;
00025 };
00026
00027 TMPL
00028 class semialgebraic_set
00029 {
00030 public:
00031 typedef typename semialgebraic_set_def<K>::Polynomial Polynomial;
00032
00033 semialgebraic_set(void) {};
00034 semialgebraic_set(const char* str1, int s1) ;
00035 semialgebraic_set(const char* str1, int s1, const char* str2, int s2) ;
00036 semialgebraic_set(const Polynomial& eq, int s) ;
00037 semialgebraic_set(const Polynomial& eq1, int s1, const Polynomial& eq2, int s2) ;
00038 ~semialgebraic_set(void) {};
00039
00040 Seq<Polynomial> inequations() const { return this->m_polynomials ; }
00041
00042 Polynomial inequation(int i=0) const { return this->m_polynomials[i] ; }
00043 int sign(int i=0) const { return this->m_signs[i] ; }
00044
00045 void insert(const Polynomial& p, int s) {
00046 this->m_polynomials<<p; this->m_signs<<s;
00047 }
00048 int nbineq() const { return m_polynomials.size(); }
00049
00050 private:
00051 Seq<Polynomial> m_polynomials ;
00052 Seq<int> m_signs;
00053 } ;
00054
00055 TMPL
00056 SemialgebraicSet::semialgebraic_set(const char* s1,int i1) {
00057 m_polynomials<<Polynomial(s1);
00058 m_signs<<i1;
00059 }
00060
00061 TMPL
00062 SemialgebraicSet::semialgebraic_set(const char* s1, int i1, const char* s2, int i2) {
00063 m_polynomials<< (i1<0? (-1)*Polynomial(s1) : s1) ;
00064 m_polynomials<< (i2<0? (-1)*Polynomial(s2) : s2) ;
00065 }
00066
00067 TMPL
00068 SemialgebraicSet::semialgebraic_set(const Polynomial& p1, int i1) {
00069 m_polynomials<< (i1<0? (-1)*p1 : p1) ;
00070
00071 }
00072
00073 TMPL
00074 SemialgebraicSet::semialgebraic_set(const Polynomial& p1, int i1, const Polynomial& p2, int i2) {
00075 m_polynomials<<p1;
00076 m_polynomials<<p2;
00077 }
00078
00079
00080 } ;
00081 } ;
00082
00083 # undef TMPL
00084 # undef SemialgebraicSet
00085 # endif // shape_semialgebraic_set_hpp