00001 
00002 #include <basix/int.hpp>
00003 #include <basix/vector.hpp>
00004 #include <algebramix/vector_unrolled.hpp>
00005 #include <algebramix/vector_simd.hpp>
00006 #include <basix/tuple.hpp>
00007 #include <basix/alias.hpp>
00008 #include <basix/glue.hpp>
00009 
00010 #define int_literal(x) as_int (as_string (x))
00011 
00012 namespace mmx {
00013   static vector<int>
00014   GLUE_1 (const tuple<int> &arg_1) {
00015     return vector<int > (as_vector (arg_1));
00016   }
00017   
00018   static vector<int>
00019   GLUE_2 (const tuple<int> &arg_1) {
00020     return vector<int > (as_vector (arg_1));
00021   }
00022   
00023   static iterator<generic>
00024   GLUE_3 (const vector<int> &arg_1) {
00025     return as<iterator<generic> > (iterate (arg_1));
00026   }
00027   
00028   static int
00029   GLUE_4 (const vector<int> &arg_1) {
00030     return N (arg_1);
00031   }
00032   
00033   static int
00034   GLUE_5 (const vector<int> &arg_1, const int &arg_2) {
00035     return arg_1[arg_2];
00036   }
00037   
00038   static alias<int>
00039   GLUE_6 (const alias<vector<int> > &arg_1, const int &arg_2) {
00040     return alias_access<int > (arg_1, arg_2);
00041   }
00042   
00043   static vector<int>
00044   GLUE_7 (const vector<int> &arg_1, const int &arg_2, const int &arg_3) {
00045     return range (arg_1, arg_2, arg_3);
00046   }
00047   
00048   static vector<int>
00049   GLUE_8 (const vector<int> &arg_1) {
00050     return reverse (arg_1);
00051   }
00052   
00053   static vector<int>
00054   GLUE_9 (const vector<int> &arg_1, const vector<int> &arg_2) {
00055     return append (arg_1, arg_2);
00056   }
00057   
00058   static alias<vector<int> >
00059   GLUE_10 (const alias<vector<int> > &arg_1, const vector<int> &arg_2) {
00060     return alias_write (arg_1, arg_2);
00061   }
00062   
00063   static vector<int>
00064   GLUE_11 (const int &arg_1, const vector<int> &arg_2) {
00065     return cons (arg_1, arg_2);
00066   }
00067   
00068   static int
00069   GLUE_12 (const vector<int> &arg_1) {
00070     return car (arg_1);
00071   }
00072   
00073   static vector<int>
00074   GLUE_13 (const vector<int> &arg_1) {
00075     return cdr (arg_1);
00076   }
00077   
00078   static bool
00079   GLUE_14 (const vector<int> &arg_1) {
00080     return is_nil (arg_1);
00081   }
00082   
00083   static bool
00084   GLUE_15 (const vector<int> &arg_1) {
00085     return is_atom (arg_1);
00086   }
00087   
00088   static vector<int>
00089   GLUE_16 (const vector<int> &arg_1, const int &arg_2) {
00090     return insert (arg_1, arg_2);
00091   }
00092   
00093   static int
00094   GLUE_17 (const vector<int> &arg_1, const int &arg_2) {
00095     return find (arg_1, arg_2);
00096   }
00097   
00098   static bool
00099   GLUE_18 (const vector<int> &arg_1, const int &arg_2) {
00100     return contains (arg_1, arg_2);
00101   }
00102   
00103   static vector<generic>
00104   GLUE_19 (const vector<int> &arg_1) {
00105     return as<vector<generic> > (arg_1);
00106   }
00107   
00108   static vector<int>
00109   GLUE_20 (const vector<int> &arg_1) {
00110     return -arg_1;
00111   }
00112   
00113   static vector<int>
00114   GLUE_21 (const vector<int> &arg_1) {
00115     return square (arg_1);
00116   }
00117   
00118   static vector<int>
00119   GLUE_22 (const vector<int> &arg_1, const vector<int> &arg_2) {
00120     return arg_1 + arg_2;
00121   }
00122   
00123   static vector<int>
00124   GLUE_23 (const vector<int> &arg_1, const vector<int> &arg_2) {
00125     return arg_1 - arg_2;
00126   }
00127   
00128   static vector<int>
00129   GLUE_24 (const vector<int> &arg_1, const vector<int> &arg_2) {
00130     return arg_1 * arg_2;
00131   }
00132   
00133   static vector<int>
00134   GLUE_25 (const int &arg_1, const vector<int> &arg_2) {
00135     return arg_1 + arg_2;
00136   }
00137   
00138   static vector<int>
00139   GLUE_26 (const vector<int> &arg_1, const int &arg_2) {
00140     return arg_1 + arg_2;
00141   }
00142   
00143   static vector<int>
00144   GLUE_27 (const int &arg_1, const vector<int> &arg_2) {
00145     return arg_1 - arg_2;
00146   }
00147   
00148   static vector<int>
00149   GLUE_28 (const vector<int> &arg_1, const int &arg_2) {
00150     return arg_1 - arg_2;
00151   }
00152   
00153   static vector<int>
00154   GLUE_29 (const int &arg_1, const vector<int> &arg_2) {
00155     return arg_1 * arg_2;
00156   }
00157   
00158   static vector<int>
00159   GLUE_30 (const vector<int> &arg_1, const int &arg_2) {
00160     return arg_1 * arg_2;
00161   }
00162   
00163   static int
00164   GLUE_31 (const vector<int> &arg_1, const vector<int> &arg_2) {
00165     return dot (arg_1, arg_2);
00166   }
00167   
00168   static int
00169   GLUE_32 (const vector<int> &arg_1) {
00170     return big_mul (arg_1);
00171   }
00172   
00173   static int
00174   GLUE_33 (const vector<int> &arg_1) {
00175     return big_add (arg_1);
00176   }
00177   
00178   static bool
00179   GLUE_34 (const vector<int> &arg_1, const vector<int> &arg_2) {
00180     return arg_1 == arg_2;
00181   }
00182   
00183   static bool
00184   GLUE_35 (const vector<int> &arg_1, const vector<int> &arg_2) {
00185     return arg_1 != arg_2;
00186   }
00187   
00188   static bool
00189   GLUE_36 (const vector<int> &arg_1, const int &arg_2) {
00190     return arg_1 == arg_2;
00191   }
00192   
00193   static bool
00194   GLUE_37 (const vector<int> &arg_1, const int &arg_2) {
00195     return arg_1 != arg_2;
00196   }
00197   
00198   static bool
00199   GLUE_38 (const int &arg_1, const vector<int> &arg_2) {
00200     return arg_1 == arg_2;
00201   }
00202   
00203   static bool
00204   GLUE_39 (const int &arg_1, const vector<int> &arg_2) {
00205     return arg_1 != arg_2;
00206   }
00207   
00208   static bool
00209   GLUE_40 (const vector<int> &arg_1, const vector<int> &arg_2) {
00210     return arg_1 <= arg_2;
00211   }
00212   
00213   static bool
00214   GLUE_41 (const vector<int> &arg_1, const vector<int> &arg_2) {
00215     return arg_1 >= arg_2;
00216   }
00217   
00218   static bool
00219   GLUE_42 (const vector<int> &arg_1, const vector<int> &arg_2) {
00220     return arg_1 < arg_2;
00221   }
00222   
00223   static bool
00224   GLUE_43 (const vector<int> &arg_1, const vector<int> &arg_2) {
00225     return arg_1 > arg_2;
00226   }
00227   
00228   static bool
00229   GLUE_44 (const vector<int> &arg_1, const int &arg_2) {
00230     return arg_1 <= arg_2;
00231   }
00232   
00233   static bool
00234   GLUE_45 (const vector<int> &arg_1, const int &arg_2) {
00235     return arg_1 >= arg_2;
00236   }
00237   
00238   static bool
00239   GLUE_46 (const vector<int> &arg_1, const int &arg_2) {
00240     return arg_1 < arg_2;
00241   }
00242   
00243   static bool
00244   GLUE_47 (const vector<int> &arg_1, const int &arg_2) {
00245     return arg_1 > arg_2;
00246   }
00247   
00248   static bool
00249   GLUE_48 (const int &arg_1, const vector<int> &arg_2) {
00250     return arg_1 <= arg_2;
00251   }
00252   
00253   static bool
00254   GLUE_49 (const int &arg_1, const vector<int> &arg_2) {
00255     return arg_1 >= arg_2;
00256   }
00257   
00258   static bool
00259   GLUE_50 (const int &arg_1, const vector<int> &arg_2) {
00260     return arg_1 < arg_2;
00261   }
00262   
00263   static bool
00264   GLUE_51 (const int &arg_1, const vector<int> &arg_2) {
00265     return arg_1 > arg_2;
00266   }
00267   
00268   static vector<int>
00269   GLUE_52 (const vector<int> &arg_1, const vector<int> &arg_2) {
00270     return inf (arg_1, arg_2);
00271   }
00272   
00273   static vector<int>
00274   GLUE_53 (const vector<int> &arg_1, const vector<int> &arg_2) {
00275     return sup (arg_1, arg_2);
00276   }
00277   
00278   void
00279   glue_vector_int () {
00280     static bool done = false;
00281     if (done) return;
00282     done = true;
00283     call_glue (string ("glue_int"));
00284     call_glue (string ("glue_vector_generic"));
00285     define_type<vector<int> > (gen (lit ("Vector"), lit ("Int")));
00286     define ("vector", GLUE_1);
00287     define ("[]", GLUE_2);
00288     define_converter (":>", GLUE_3, PENALTY_CAST);
00289     define ("#", GLUE_4);
00290     define (".[]", GLUE_5);
00291     define (".[]", GLUE_6);
00292     define (".[]", GLUE_7);
00293     define ("reverse", GLUE_8);
00294     define ("><", GLUE_9);
00295     define ("<<", GLUE_10);
00296     define ("cons", GLUE_11);
00297     define ("car", GLUE_12);
00298     define ("cdr", GLUE_13);
00299     define ("nil?", GLUE_14);
00300     define ("atom?", GLUE_15);
00301     define ("insert", GLUE_16);
00302     define ("find", GLUE_17);
00303     define ("contains?", GLUE_18);
00304     define_converter (":>", GLUE_19, PENALTY_PROMOTE_GENERIC);
00305     define ("-", GLUE_20);
00306     define ("square", GLUE_21);
00307     define ("+", GLUE_22);
00308     define ("-", GLUE_23);
00309     define ("*", GLUE_24);
00310     define ("+", GLUE_25);
00311     define ("+", GLUE_26);
00312     define ("-", GLUE_27);
00313     define ("-", GLUE_28);
00314     define ("*", GLUE_29);
00315     define ("*", GLUE_30);
00316     define ("dot", GLUE_31);
00317     define ("big_mul", GLUE_32);
00318     define ("big_add", GLUE_33);
00319     define ("=", GLUE_34);
00320     define ("!=", GLUE_35);
00321     define ("=", GLUE_36);
00322     define ("!=", GLUE_37);
00323     define ("=", GLUE_38);
00324     define ("!=", GLUE_39);
00325     define ("<=", GLUE_40);
00326     define (">=", GLUE_41);
00327     define ("<", GLUE_42);
00328     define (">", GLUE_43);
00329     define ("<=", GLUE_44);
00330     define (">=", GLUE_45);
00331     define ("<", GLUE_46);
00332     define (">", GLUE_47);
00333     define ("<=", GLUE_48);
00334     define (">=", GLUE_49);
00335     define ("<", GLUE_50);
00336     define (">", GLUE_51);
00337     define ("inf", GLUE_52);
00338     define ("sup", GLUE_53);
00339   }
00340 }