00001
00002 #include <basix/int.hpp>
00003 #include <basix/table.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 pair<generic, generic>
00012 GLUE_1 (const generic &arg_1, const generic &arg_2) {
00013 return pair<generic, generic > (arg_1, arg_2);
00014 }
00015
00016 static generic
00017 GLUE_2 (const pair<generic, generic> &arg_1) {
00018 return get_key (arg_1);
00019 }
00020
00021 static generic
00022 GLUE_3 (const pair<generic, generic> &arg_1) {
00023 return get_value (arg_1);
00024 }
00025
00026 static bool
00027 GLUE_4 (const generic &arg_1) {
00028 return is_table (arg_1);
00029 }
00030
00031 static mmx_table(generic, generic)
00032 GLUE_5 (const generic &arg_1) {
00033 return (mmx_table(generic, generic ) (arg_1));
00034 }
00035
00036 static mmx_table(generic, generic)
00037 GLUE_6 (const tuple<pair<generic, generic> > &arg_1) {
00038 return make_mmx_table (as_vector (arg_1));
00039 }
00040
00041 static iterator<generic>
00042 GLUE_7 (const mmx_table(generic, generic) &arg_1) {
00043 return entries (arg_1);
00044 }
00045
00046 static int
00047 GLUE_8 (const mmx_table(generic, generic) &arg_1) {
00048 return N (arg_1);
00049 }
00050
00051 static int
00052 GLUE_9 (const mmx_table(generic, generic) &arg_1) {
00053 return discrete_complexity (arg_1);
00054 }
00055
00056 static bool
00057 GLUE_10 (const mmx_table(generic, generic) &arg_1, const generic &arg_2) {
00058 return contains (arg_1, arg_2);
00059 }
00060
00061 static generic
00062 GLUE_11 (const mmx_table(generic, generic) &arg_1, const generic &arg_2) {
00063 return read (arg_1, arg_2);
00064 }
00065
00066 static alias<generic>
00067 GLUE_12 (const alias<mmx_table(generic, generic) > &arg_1, const generic &arg_2) {
00068 return alias_access<generic > (arg_1, arg_2);
00069 }
00070
00071 static void
00072 GLUE_13 (const alias<mmx_table(generic, generic) > &arg_1, const generic &arg_2) {
00073 alias_reset (arg_1, arg_2);
00074 }
00075
00076 static void
00077 GLUE_14 (const mmx_table(generic, generic) &arg_1, const generic &arg_2, const generic &arg_3) {
00078 inside_set (arg_1, arg_2, arg_3);
00079 }
00080
00081 static mmx_table(generic, generic)
00082 GLUE_15 (const mmx_table(generic, generic) &arg_1) {
00083 return reverse (arg_1);
00084 }
00085
00086 static mmx_table(generic, generic)
00087 GLUE_16 (const mmx_table(generic, generic) &arg_1, const mmx_table(generic, generic) &arg_2) {
00088 return append (arg_1, arg_2);
00089 }
00090
00091 static alias<mmx_table(generic, generic) >
00092 GLUE_17 (const alias<mmx_table(generic, generic) > &arg_1, const mmx_table(generic, generic) &arg_2) {
00093 return alias_write (arg_1, arg_2);
00094 }
00095
00096 static bool
00097 GLUE_18 (const mmx_table(generic, generic) &arg_1, const generic &arg_2, const generic &arg_3, const tuple<generic> &arg_4) {
00098 return ttable_contains (arg_1, arg_2, arg_3, as_vector (arg_4));
00099 }
00100
00101 static generic
00102 GLUE_19 (const mmx_table(generic, generic) &arg_1, const generic &arg_2, const generic &arg_3, const tuple<generic> &arg_4) {
00103 return ttable_access (arg_1, arg_2, arg_3, as_vector (arg_4));
00104 }
00105
00106 static alias<generic>
00107 GLUE_20 (const alias<mmx_table(generic, generic) > &arg_1, const generic &arg_2, const generic &arg_3, const tuple<generic> &arg_4) {
00108 return alias_tuple_access<generic > (arg_1, arg_2, arg_3, as_vector (arg_4));
00109 }
00110
00111 static void
00112 GLUE_21 (const alias<mmx_table(generic, generic) > &arg_1, const generic &arg_2, const generic &arg_3, const tuple<generic> &arg_4) {
00113 alias_tuple_reset (arg_1, arg_2, arg_3, as_vector (arg_4));
00114 }
00115
00116 void
00117 glue_basix_table_generic () {
00118 static bool done = false;
00119 if (done) return;
00120 done = true;
00121 call_glue (string ("glue_generic"));
00122 call_glue (string ("glue_int"));
00123 define_type<pair<generic, generic> > (gen (lit ("Binding"), lit ("Generic"), lit ("Generic")));
00124 define ("~>", GLUE_1);
00125 define (".key", GLUE_2);
00126 define (".image", GLUE_3);
00127 define_type<mmx_table(generic, generic) > (gen (lit ("Table"), lit ("Generic"), lit ("Generic")));
00128 define ("table?", GLUE_4);
00129 define ("table", GLUE_5);
00130 define ("table", GLUE_6);
00131 define_converter (":>", GLUE_7, PENALTY_PROMOTE_GENERIC);
00132 define ("#", GLUE_8);
00133 define ("complexity", GLUE_9);
00134 define ("contains?", GLUE_10);
00135 define (".[]", GLUE_11);
00136 define (".[]", GLUE_12);
00137 define ("reset", GLUE_13);
00138 define ("set", GLUE_14);
00139 define ("reverse", GLUE_15);
00140 define ("><", GLUE_16);
00141 define ("<<", GLUE_17);
00142 define ("contains?", GLUE_18);
00143 define (".[]", GLUE_19);
00144 define (".[]", GLUE_20);
00145 define ("reset", GLUE_21);
00146 }
00147 }