00001 00002 #include <basix/int.hpp> 00003 #include <basix/vector.hpp> 00004 #include <basix/dynamic.hpp> 00005 #include <basix/routine.hpp> 00006 #include <basix/tuple.hpp> 00007 #include <basix/glue.hpp> 00008 00009 #define int_literal(x) as_int (as_string (x)) 00010 00011 namespace mmx { 00012 static dynamic 00013 GLUE_1 (const generic &arg_1) { 00014 return dynamic (arg_1); 00015 } 00016 00017 static generic 00018 GLUE_2 (const dynamic &arg_1) { 00019 return contents (arg_1); 00020 } 00021 00022 static dynamic 00023 GLUE_3 (const routine &arg_1, const tuple<dynamic> &arg_2) { 00024 return dynamic (arg_1, as_vector (arg_2)); 00025 } 00026 00027 static void 00028 GLUE_4 (const dynamic &arg_1, const generic &arg_2) { 00029 assign (arg_1, arg_2); 00030 } 00031 00032 static void 00033 GLUE_5 (const string &arg_1, const generic &arg_2) { 00034 dynamic_event (arg_1, arg_2); 00035 } 00036 00037 void 00038 glue_dynamic () { 00039 static bool done = false; 00040 if (done) return; 00041 done = true; 00042 call_glue (string ("glue_generic")); 00043 call_glue (string ("glue_routine")); 00044 define_type<dynamic > (lit ("Dynamic")); 00045 define ("dynamic", GLUE_1); 00046 define ("contents", GLUE_2); 00047 define ("apply", GLUE_3); 00048 define ("assign", GLUE_4); 00049 define ("dynamic_notify", GLUE_5); 00050 } 00051 }