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 }