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 }