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