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 }