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 }