realroot_doc 0.1.1
/Users/mourrain/Devel/mmx/realroot/include/realroot/polynomial_sparse.hpp
Go to the documentation of this file.
00001 #ifndef realroot_ring_sparse_hpp
00002 #define realroot_ring_sparse_hpp
00003 //====================================================================
00020 //====================================================================
00021 #include <realroot/sparse_monomials.hpp>
00022 #include <realroot/Seq.hpp>
00023 #include <realroot/polynomial.hpp>
00024 #include <realroot/ring.hpp>
00025 
00026 #define TMPL template<class C, class O> 
00027 #define RING ring<C, Sparse, O > 
00028 //====================================================================
00029 namespace mmx {
00030 
00031   template<class A, class B> struct use;
00032   template<class C, class V> struct polynomial;
00033   template<class C, class V> struct with;
00034   
00035   struct Sparse {};
00036   
00037   template<> struct default_variant_of<Sparse> {
00038     typedef DegRevLex Variant;
00039   } ;
00040 
00041   template<class C, class O> 
00042   struct use<polynomial_of, polynomial<C, with<Sparse,O> > > {
00043     
00044     typedef sparse::monomial_seq<C,O>       rep_t;
00045     typedef typename rep_t::Monomial        Monomial;
00046     typedef C                               Scalar;
00047     typedef RING                            var_t;
00048     typedef RING                            Ring;
00049     typedef polynomial<C, with<Sparse,O> >  Polynomial;
00050 
00051   };
00052 
00053 
00055   template<class C, class O > 
00056   struct ring<C, Sparse, O > {
00057 
00059     typedef sparse::monomial_seq<C,O>   rep_t;
00060     typedef typename rep_t::Monomial Monomial;
00061     typedef C                        Scalar;
00062     typedef RING                            var_t;
00063     typedef RING                            self_t;
00064     typedef polynomial<C, with<Sparse,O> >  Polynomial;
00065     
00066     ring(){}
00067     ring(const self_t& r){}
00068     ring(const char* s) {var = variables(s); }
00069     
00070     Polynomial  operator[](int i) const {
00071       return Polynomial((C)1,1,i);
00072     }
00073     
00074     static int nbvar() { return var.nbvar(); }
00075     
00076     static variables var;
00077     static variables& vars () { return var;}
00078   
00079   };
00080   
00081   TMPL variables RING::var;
00082   TMPL C sample (const RING& R) { return (C)0; }
00083 
00084 } // namespace mmx
00085 //====================================================================
00086 #undef TMPL
00087 #undef PRING
00088 #undef RING
00089 #undef RING
00090 #undef Polynomial
00091 #endif //realroot_ring_sparse_hpp