00001 #ifndef realroot_ring_bernstein_hpp
00002 #define realroot_ring_bernstein_hpp
00003
00018 #include <realroot/Seq.hpp>
00019 #include <realroot/tensor_bernstein.hpp>
00020 #include <realroot/tensor_bernstein_fcts.hpp>
00021 #include <realroot/monomial.hpp>
00022 #include <realroot/polynomial.hpp>
00023 #include <realroot/ring.hpp>
00024
00025 #define TMPL template<class C,class B>
00026 #define RING ring<C,B>
00027
00028 namespace mmx {
00029 struct Bernstein {};
00030
00031
00032 template<class C>
00033 struct use<polynomial_of,polynomial<C,with<Bernstein> > >{
00034
00035 typedef tensor::bernstein<C> rep_t;
00036 typedef C Scalar;
00037 typedef polynomial<C, with<Bernstein> > Polynomial;
00038 typedef monom<C> Monomial;
00039 typedef ring<C, Bernstein > Ring;
00040
00041 };
00042
00043 template<class C>
00044 struct ring<C, Bernstein > {
00045 typedef tensor::bernstein<C> rep_t;
00046 typedef C Scalar;
00047 typedef polynomial<C, with<Bernstein> > Polynomial;
00048 typedef monom<C> Monomial;
00049 typedef ring<C, Bernstein > Ring;
00050
00051 typedef ring<C, Bernstein > self_t;
00052
00053
00054 ring(const char* s) {var = variables(s); }
00055
00056 static variables var;
00057 static variables& vars () { return var;}
00058 static int nbvar() { return var.nbvar(); }
00059
00060 Polynomial operator[](int i) const {
00061 return Polynomial((C)1,1,i);
00062 }
00063 };
00064
00065
00066 template<class C> struct ring_of;
00067 template<class C> struct ring_of<polynomial<C,with<Bernstein> > > {
00068 typedef ring<C, Bernstein> Ring;
00069 } ;
00070
00071 template<class C> variables ring<C,Bernstein>::var;
00072
00073 TMPL inline Seq<typename ring<C,Bernstein>::Polynomial>
00074 coefficients(const typename ring<C,Bernstein>::Polynomial& pol, int v ) {
00075 Seq<typename ring<C,Bernstein>::Polynomial> res;
00076
00077 return res;
00078 }
00079
00080
00081 }
00082 #undef TMPL
00083 #undef RING
00084 #undef Polynomial
00085 #endif // realroot_polynom_mdse_hpp