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 }