algebramix_doc 0.3
/Users/mourrain/Devel/mmx/algebramix/glue/glue_algebraic_generic.cpp
Go to the documentation of this file.
00001 
00002 #include <basix/vector.hpp>
00003 #include <algebramix/polynomial.hpp>
00004 #include <algebramix/polynomial_polynomial.hpp>
00005 #include <algebramix/polynomial_schonhage.hpp>
00006 #include <algebramix/algebraic.hpp>
00007 #include <basix/glue.hpp>
00008 
00009 namespace mmx {
00010     template<typename C> polynomial<C>
00011     polynomial_reverse (const vector<C>& v) {
00012       return polynomial<C> (reverse (v)); }
00013 
00014     template<typename C> polynomial<modular<modulus<C>, modular_local> >
00015     as_polynomial_modular (const polynomial<C>& f, const modulus<C>& p) {
00016       modular<modulus<C>, modular_local>::set_modulus (p);
00017       return as<polynomial<modular<modulus<C>, modular_local> > > (f); }
00018 
00019     template<typename C> vector<generic>
00020     wrap_subresultants (const polynomial<C>& f, const polynomial<C>& g) {
00021       return as<vector<generic> > (subresultants (f, g)); }
00022 
00023   }
00024 namespace mmx { POLYNOMIAL_GENERIC_USES_SCHONHAGE }
00025 
00026 namespace mmx {
00027   static algebraic<generic>
00028   GLUE_1 (const polynomial<generic> &arg_1) {
00029     return algebraic<generic > (arg_1);
00030   }
00031   
00032   static algebraic<generic>
00033   GLUE_2 (const polynomial<generic> &arg_1, const polynomial<generic> &arg_2) {
00034     return algebraic<generic > (arg_1, arg_2);
00035   }
00036   
00037   static polynomial<generic>
00038   GLUE_3 (const algebraic<generic> &arg_1) {
00039     return annihilator (arg_1);
00040   }
00041   
00042   static algebraic<generic>
00043   GLUE_4 (const algebraic<generic> &arg_1) {
00044     return normalize (arg_1);
00045   }
00046   
00047   static algebraic<generic>
00048   GLUE_5 (const algebraic<generic> &arg_1) {
00049     return -arg_1;
00050   }
00051   
00052   static algebraic<generic>
00053   GLUE_6 (const algebraic<generic> &arg_1) {
00054     return square (arg_1);
00055   }
00056   
00057   static algebraic<generic>
00058   GLUE_7 (const algebraic<generic> &arg_1, const algebraic<generic> &arg_2) {
00059     return arg_1 + arg_2;
00060   }
00061   
00062   static algebraic<generic>
00063   GLUE_8 (const algebraic<generic> &arg_1, const algebraic<generic> &arg_2) {
00064     return arg_1 - arg_2;
00065   }
00066   
00067   static algebraic<generic>
00068   GLUE_9 (const algebraic<generic> &arg_1, const algebraic<generic> &arg_2) {
00069     return arg_1 * arg_2;
00070   }
00071   
00072   static algebraic<generic>
00073   GLUE_10 (const algebraic<generic> &arg_1, const algebraic<generic> &arg_2) {
00074     return arg_1 / arg_2;
00075   }
00076   
00077   void
00078   glue_algebraic_generic () {
00079     static bool done = false;
00080     if (done) return;
00081     done = true;
00082     call_glue (string ("glue_polynomial_generic"));
00083     define_type<algebraic<generic> > (gen (lit ("Algebraic"), lit ("Generic")));
00084     define ("algebraic", GLUE_1);
00085     define ("algebraic", GLUE_2);
00086     define ("annihilator", GLUE_3);
00087     define ("normalize", GLUE_4);
00088     define ("-", GLUE_5);
00089     define ("square", GLUE_6);
00090     define ("+", GLUE_7);
00091     define ("-", GLUE_8);
00092     define ("*", GLUE_9);
00093     define ("/", GLUE_10);
00094   }
00095 }
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines