shape_doc 0.1
/Users/mourrain/Devel/mmx/shape/include/shape/semialgebraic_set.hpp
Go to the documentation of this file.
00001 /*****************************************************************************
00002  * M a t h e m a g i x
00003  *****************************************************************************
00004  * AlgebraicCurve
00005  * 2008-03-28
00006  * Julien Wintz & Bernard Mourrain
00007  *****************************************************************************
00008  *               Copyright (C) 2006 INRIA Sophia-Antipolis
00009  *****************************************************************************
00010  * Comments :
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   //m_signs<<i1;
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 } ; // namespace shape
00081 } ; // namespace mmx
00082 
00083 # undef TMPL
00084 # undef SemialgebraicSet
00085 # endif // shape_semialgebraic_set_hpp