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