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 }