numerix_doc 0.4
/Users/mourrain/Devel/mmx/numerix/glue/glue_modular_int.cpp
Go to the documentation of this file.
00001 
00002 #include <basix/int.hpp>
00003 #include <numerix/integer.hpp>
00004 #include <numerix/modular.hpp>
00005 #include <numerix/modular_integer.hpp>
00006 #include <basix/glue.hpp>
00007 
00008 #define int_literal(x) as_int (as_string (x))
00009 
00010 namespace mmx {
00011   static generic
00012   GLUE_1 (const int &arg_1) {
00013     return integer_construct (arg_1);
00014   }
00015   
00016   static modulus<int>
00017   GLUE_2 (const int &arg_1) {
00018     return modulus<int > (arg_1);
00019   }
00020   
00021   static modulus<int>
00022   GLUE_3 (const int &arg_1) {
00023     return modulus<int > (arg_1);
00024   }
00025   
00026   static int
00027   GLUE_4 (const modulus<int> &arg_1) {
00028     return *arg_1;
00029   }
00030   
00031   static mmx_modular(int)
00032   GLUE_5 (const int &arg_1, const int &arg_2) {
00033     return (mmx_modular(int ) (arg_1, arg_2));
00034   }
00035   
00036   static mmx_modular(int)
00037   GLUE_6 (const int &arg_1, const modulus<int> &arg_2) {
00038     return (mmx_modular(int ) (arg_1, arg_2));
00039   }
00040   
00041   static mmx_modular(int)
00042   GLUE_7 (const int &arg_1, const modulus<int> &arg_2) {
00043     return (mmx_modular(int ) (arg_1, arg_2));
00044   }
00045   
00046   static modulus<int>
00047   GLUE_8 (const mmx_modular(int) &arg_1) {
00048     return get_modulus (arg_1);
00049   }
00050   
00051   static int
00052   GLUE_9 (const mmx_modular(int) &arg_1) {
00053     return *arg_1;
00054   }
00055   
00056   static mmx_modular(int)
00057   GLUE_10 (const mmx_modular(int) &arg_1) {
00058     return -arg_1;
00059   }
00060   
00061   static mmx_modular(int)
00062   GLUE_11 (const mmx_modular(int) &arg_1) {
00063     return square (arg_1);
00064   }
00065   
00066   static mmx_modular(int)
00067   GLUE_12 (const mmx_modular(int) &arg_1, const mmx_modular(int) &arg_2) {
00068     return arg_1 + arg_2;
00069   }
00070   
00071   static mmx_modular(int)
00072   GLUE_13 (const mmx_modular(int) &arg_1, const mmx_modular(int) &arg_2) {
00073     return arg_1 - arg_2;
00074   }
00075   
00076   static mmx_modular(int)
00077   GLUE_14 (const mmx_modular(int) &arg_1, const mmx_modular(int) &arg_2) {
00078     return arg_1 * arg_2;
00079   }
00080   
00081   static mmx_modular(int)
00082   GLUE_15 (const int &arg_1, const mmx_modular(int) &arg_2) {
00083     return arg_1 + arg_2;
00084   }
00085   
00086   static mmx_modular(int)
00087   GLUE_16 (const mmx_modular(int) &arg_1, const int &arg_2) {
00088     return arg_1 + arg_2;
00089   }
00090   
00091   static mmx_modular(int)
00092   GLUE_17 (const int &arg_1, const mmx_modular(int) &arg_2) {
00093     return arg_1 - arg_2;
00094   }
00095   
00096   static mmx_modular(int)
00097   GLUE_18 (const mmx_modular(int) &arg_1, const int &arg_2) {
00098     return arg_1 - arg_2;
00099   }
00100   
00101   static mmx_modular(int)
00102   GLUE_19 (const int &arg_1, const mmx_modular(int) &arg_2) {
00103     return arg_1 * arg_2;
00104   }
00105   
00106   static mmx_modular(int)
00107   GLUE_20 (const mmx_modular(int) &arg_1, const int &arg_2) {
00108     return arg_1 * arg_2;
00109   }
00110   
00111   static mmx_modular(int)
00112   GLUE_21 (const mmx_modular(int) &arg_1, const mmx_modular(int) &arg_2) {
00113     return arg_1 / arg_2;
00114   }
00115   
00116   static mmx_modular(int)
00117   GLUE_22 (const int &arg_1, const mmx_modular(int) &arg_2) {
00118     return arg_1 / arg_2;
00119   }
00120   
00121   static mmx_modular(int)
00122   GLUE_23 (const mmx_modular(int) &arg_1, const int &arg_2) {
00123     return arg_1 / arg_2;
00124   }
00125   
00126   static mmx_modular(int)
00127   GLUE_24 (const mmx_modular(int) &arg_1, const int &arg_2) {
00128     return binpow (arg_1, arg_2);
00129   }
00130   
00131   void
00132   glue_modular_int () {
00133     static bool done = false;
00134     if (done) return;
00135     done = true;
00136     call_glue (string ("glue_int"));
00137     define_constructor<int > (GLUE_1);
00138     define_type<modulus<int> > (gen (lit ("Modulus"), lit ("Int")));
00139     define_type<mmx_modular(int) > (gen (lit ("Modular"), lit ("Int")));
00140     define ("modulus", GLUE_2);
00141     define_converter ("upgrade", GLUE_3, PENALTY_HOMOMORPHISM);
00142     define_converter (":>", GLUE_4, PENALTY_CAST);
00143     define ("modular", GLUE_5);
00144     define ("modular", GLUE_6);
00145     define ("mod", GLUE_7);
00146     define ("get_modulus", GLUE_8);
00147     define ("preimage", GLUE_9);
00148     define ("-", GLUE_10);
00149     define ("square", GLUE_11);
00150     define ("+", GLUE_12);
00151     define ("-", GLUE_13);
00152     define ("*", GLUE_14);
00153     define ("+", GLUE_15);
00154     define ("+", GLUE_16);
00155     define ("-", GLUE_17);
00156     define ("-", GLUE_18);
00157     define ("*", GLUE_19);
00158     define ("*", GLUE_20);
00159     define ("/", GLUE_21);
00160     define ("/", GLUE_22);
00161     define ("/", GLUE_23);
00162     define ("^", GLUE_24);
00163   }
00164 }
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines