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 }