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 }