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 }