synaps/mpol/MPolDse.h

00001 #ifndef SYNAPS_MPOLDSE_VIEW_H
00002 #define SYNAPS_MPOLDSE_VIEW_H
00003 
00004 #include <synaps/init.h>
00005 #include <synaps/base/shared_object.h>
00006 #include <synaps/arithm/traits.h>
00007 #include <synaps/arithm/texp.h>
00008 #include <synaps/mpol/MPol.h>
00009 #include <synaps/mpol/mpoldse/monomial.h>
00010 #include <synaps/mpol/mpoldse/bernstein.h>
00011 
00012 __BEGIN_NAMESPACE_SYNAPS
00018 template< class C, class R = mpoldse::monomial<C> > 
00019 struct MPolDse //: arithm::overloaded
00020 {
00021   typedef C                               value_type;
00022   typedef C                               coeff_t;
00023   typedef typename R::size_type           size_type;
00024   typedef R                               rep_type;
00025   typedef typename R::iterator            iterator;
00026   typedef typename R::const_iterator      const_iterator;
00027   typedef MPolDse<C,R>                    self_t;
00028   shared_object<R> data;
00029   R &       rep()       { return (*data);}
00030   const R & rep() const { return (*data);}
00031   MPolDse( int nvr, const int * szs, const int * vrs );
00032   MPolDse( const C& x = 0 );
00033   template<class O, class E> 
00034   MPolDse( const MPol<C,O,E>& mpol );
00035   MPolDse( const char * s ) ;
00036   template<class X> 
00037   MPolDse( const X& x );
00038   
00039   iterator               begin()        {return rep().begin();}
00040   const_iterator         begin()  const {return rep().begin();}
00041   iterator               end()          {return rep().end();}
00042   const_iterator         end()    const {return rep().end();}
00043   
00044   bool operator==( const C& c ) const;
00045   bool operator==( const MPolDse& mp ) const;
00046   
00047   MPolDse & operator=( const char * name);
00048   template<class X>
00049   MPolDse & operator= ( const X & x );
00050 
00051   template<class O, class E>
00052   MPolDse& operator = ( const MPol<C,O,E>& mpol );
00053   template<class X>
00054   MPolDse& operator+= ( const X & x ) 
00055   { 
00056     *this = *this + x; return *this; 
00057   } ;
00058   
00059   MPolDse& operator+= ( const MPolDse& );
00060   MPolDse& operator+= ( const C& );
00061   template<class X>
00062   MPolDse& operator-= ( const X & x ) { *this = *this - x; return *this; };
00063   MPolDse& operator-= ( const MPolDse& );
00064   MPolDse& operator-= ( const C& );
00065   template<class X>
00066   MPolDse& operator*= ( const X & x ) { *this = *this * x; return *this; };
00067   MPolDse& operator*= ( const C& );  
00068   MPolDse& operator*= ( const MPolDse& );
00069   const int * vrs() const { return rep().env.vrs(); };
00070   const int * szs() const { return rep().env.szs(); };
00071   int nvars() const;
00072   int nvr() const { return nvars(); };
00073   int varid( int i ) const;
00074   const C& operator[]( int i ) const;
00075   C& operator[]( int i ) ;
00076   //  std::string varname( int i ) const ;
00077   //  void lexsort();
00078 };
00079 
00080 template<class C, class R>
00081 int nbvar( const MPolDse<C,R>& mp ) { return mp.nvr(); };
00082 template<class C, class R> 
00083 std::ostream& operator<<( std::ostream& o, const MPolDse<C,R>& mp );
00084 template<class C, class R> 
00085 bool operator==( const C& c, const MPolDse<C,R>& mp );
00086 template<class C, class R>
00087 MPolDse<C,R> operator^( const MPolDse<C,R>& a, unsigned n );
00088 /*
00089   template<class C, class R> void split( MPolDse<C,R>& l, MPolDse<C,R>& r );
00090   template<class C, class R> void split( MPolDse<C,R>& l, MPolDse<C,R>& r, const MPolDse<C,R>& p );
00091 */
00092 
00098 template<class Coeff, class Rep>
00099 void diff( MPolDse<Coeff,Rep>& derivative, const MPolDse<Coeff,Rep>& polynom, int v );
00100 
00107 template<class Result, class Coeff, class Rep, class Parameters>
00108 void eval( Result& result, const MPolDse<Coeff,Rep>& polynom, const Parameters& parameters ) ;
00109 
00110 template<class It>
00111 void MPolDseSystem( It b, It e )
00112 {
00113   mpoldse::eenv tmp(b->rep().env);
00114   It i = b;
00115   i++;
00116   for ( ; i != e; i ++ )
00117     tmp = mpoldse::eenv::mrgvrs(tmp,i->rep().env);
00118   for ( i = b; i != e; i ++ )
00119     i->rep().env = mpoldse::eenv::rewrite(tmp,i->rep().env);
00120 };
00121 
00122 template<class C, class R>
00123 void subs0( MPolDse<C,R>& a, const MPolDse<C,R>& b, const C& v )
00124 {
00125   
00126 };
00127 
00128 __END_NAMESPACE_SYNAPS
00129 
00130 #include "mpoldse/MPolDse.C"
00131 
00132 #endif

SYNAPS DOCUMENTATION
logo