00001 00002 #include <basix/int.hpp> 00003 #include <basix/vector.hpp> 00004 #include <basix/port.hpp> 00005 #include <basix/literal.hpp> 00006 #include <basix/tuple.hpp> 00007 #include <basix/glue.hpp> 00008 00009 #define int_literal(x) as_int (as_string (x)) 00010 #define is_generic_literal is<literal> 00011 #define gen_literal_apply(f,v) gen (as<generic> (f), v) 00012 #define gen_literal_access(f,v) access (as<generic> (f), v) 00013 00014 namespace mmx { 00015 static bool 00016 GLUE_1 (const generic &arg_1) { 00017 return is_generic_literal (arg_1); 00018 } 00019 00020 static generic 00021 GLUE_2 (const literal &arg_1, const tuple<generic> &arg_2) { 00022 return gen_literal_apply (arg_1, as_vector (arg_2)); 00023 } 00024 00025 static generic 00026 GLUE_3 (const literal &arg_1, const tuple<generic> &arg_2) { 00027 return gen_literal_access (arg_1, as_vector (arg_2)); 00028 } 00029 00030 static literal 00031 GLUE_4 (const string &arg_1) { 00032 return literal (arg_1); 00033 } 00034 00035 static string 00036 GLUE_5 (const literal &arg_1) { 00037 return *arg_1; 00038 } 00039 00040 void 00041 glue_literal () { 00042 static bool done = false; 00043 if (done) return; 00044 done = true; 00045 call_glue (string ("glue_string")); 00046 define ("literal?", GLUE_1); 00047 define (".()", GLUE_2); 00048 define (".[]", GLUE_3); 00049 define ("as_literal", GLUE_4); 00050 define ("as_string", GLUE_5); 00051 } 00052 }