00001 
00002 #include <basix/int.hpp>
00003 #include <basix/vector.hpp>
00004 #include <basix/routine.hpp>
00005 #include <basix/tuple.hpp>
00006 #include <basix/alias.hpp>
00007 #include <basix/glue.hpp>
00008 
00009 #define int_literal(x) as_int (as_string (x))
00010 
00011 namespace mmx {
00012   static vector<routine>
00013   GLUE_1 (const tuple<routine> &arg_1) {
00014     return vector<routine > (as_vector (arg_1));
00015   }
00016   
00017   static vector<routine>
00018   GLUE_2 (const tuple<routine> &arg_1) {
00019     return vector<routine > (as_vector (arg_1));
00020   }
00021   
00022   static iterator<generic>
00023   GLUE_3 (const vector<routine> &arg_1) {
00024     return as<iterator<generic> > (iterate (arg_1));
00025   }
00026   
00027   static int
00028   GLUE_4 (const vector<routine> &arg_1) {
00029     return N (arg_1);
00030   }
00031   
00032   static routine
00033   GLUE_5 (const vector<routine> &arg_1, const int &arg_2) {
00034     return arg_1[arg_2];
00035   }
00036   
00037   static alias<routine>
00038   GLUE_6 (const alias<vector<routine> > &arg_1, const int &arg_2) {
00039     return alias_access<routine > (arg_1, arg_2);
00040   }
00041   
00042   static vector<routine>
00043   GLUE_7 (const vector<routine> &arg_1, const int &arg_2, const int &arg_3) {
00044     return range (arg_1, arg_2, arg_3);
00045   }
00046   
00047   static vector<routine>
00048   GLUE_8 (const vector<routine> &arg_1) {
00049     return reverse (arg_1);
00050   }
00051   
00052   static vector<routine>
00053   GLUE_9 (const vector<routine> &arg_1, const vector<routine> &arg_2) {
00054     return append (arg_1, arg_2);
00055   }
00056   
00057   static alias<vector<routine> >
00058   GLUE_10 (const alias<vector<routine> > &arg_1, const vector<routine> &arg_2) {
00059     return alias_write (arg_1, arg_2);
00060   }
00061   
00062   static vector<routine>
00063   GLUE_11 (const routine &arg_1, const vector<routine> &arg_2) {
00064     return cons (arg_1, arg_2);
00065   }
00066   
00067   static routine
00068   GLUE_12 (const vector<routine> &arg_1) {
00069     return car (arg_1);
00070   }
00071   
00072   static vector<routine>
00073   GLUE_13 (const vector<routine> &arg_1) {
00074     return cdr (arg_1);
00075   }
00076   
00077   static bool
00078   GLUE_14 (const vector<routine> &arg_1) {
00079     return is_nil (arg_1);
00080   }
00081   
00082   static bool
00083   GLUE_15 (const vector<routine> &arg_1) {
00084     return is_atom (arg_1);
00085   }
00086   
00087   static vector<routine>
00088   GLUE_16 (const vector<routine> &arg_1, const routine &arg_2) {
00089     return insert (arg_1, arg_2);
00090   }
00091   
00092   static int
00093   GLUE_17 (const vector<routine> &arg_1, const routine &arg_2) {
00094     return find (arg_1, arg_2);
00095   }
00096   
00097   static bool
00098   GLUE_18 (const vector<routine> &arg_1, const routine &arg_2) {
00099     return contains (arg_1, arg_2);
00100   }
00101   
00102   static vector<generic>
00103   GLUE_19 (const vector<routine> &arg_1) {
00104     return as<vector<generic> > (arg_1);
00105   }
00106   
00107   void
00108   glue_routine () {
00109     static bool done = false;
00110     if (done) return;
00111     done = true;
00112     call_glue (string ("glue_basix_vector_generic"));
00113     define_type<vector<routine> > (gen (lit ("Vector"), lit ("Routine")));
00114     define ("vector", GLUE_1);
00115     define ("[]", GLUE_2);
00116     define_converter (":>", GLUE_3, PENALTY_CAST);
00117     define ("#", GLUE_4);
00118     define (".[]", GLUE_5);
00119     define (".[]", GLUE_6);
00120     define (".[]", GLUE_7);
00121     define ("reverse", GLUE_8);
00122     define ("><", GLUE_9);
00123     define ("<<", GLUE_10);
00124     define ("cons", GLUE_11);
00125     define ("car", GLUE_12);
00126     define ("cdr", GLUE_13);
00127     define ("nil?", GLUE_14);
00128     define ("atom?", GLUE_15);
00129     define ("insert", GLUE_16);
00130     define ("find", GLUE_17);
00131     define ("contains?", GLUE_18);
00132     define_converter (":>", GLUE_19, PENALTY_PROMOTE_GENERIC);
00133   }
00134 }