00001 
00002 #include <basix/int.hpp>
00003 #include <basix/vector.hpp>
00004 #include <basix/port.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 bool
00012   GLUE_1 (const generic &arg_1) {
00013     return generic_is_string (arg_1);
00014   }
00015   
00016   static int
00017   GLUE_2 (const string &arg_1) {
00018     return N (arg_1);
00019   }
00020   
00021   static string
00022   GLUE_3 (const string &arg_1, const int &arg_2, const int &arg_3) {
00023     return arg_1 (arg_2, arg_3);
00024   }
00025   
00026   static string
00027   GLUE_4 (const string &arg_1, const string &arg_2) {
00028     return arg_1 * arg_2;
00029   }
00030   
00031   static string
00032   GLUE_5 (const string &arg_1, const string &arg_2) {
00033     return arg_1 * arg_2;
00034   }
00035   
00036   static alias<string>
00037   GLUE_6 (const alias<string> &arg_1, const string &arg_2) {
00038     return alias_write (arg_1, arg_2);
00039   }
00040   
00041   static bool
00042   GLUE_7 (const string &arg_1, const string &arg_2) {
00043     return arg_1 < arg_2;
00044   }
00045   
00046   static bool
00047   GLUE_8 (const string &arg_1, const string &arg_2) {
00048     return arg_1 <= arg_2;
00049   }
00050   
00051   static bool
00052   GLUE_9 (const string &arg_1, const string &arg_2) {
00053     return arg_1 > arg_2;
00054   }
00055   
00056   static bool
00057   GLUE_10 (const string &arg_1, const string &arg_2) {
00058     return arg_1 >= arg_2;
00059   }
00060   
00061   static bool
00062   GLUE_11 (const string &arg_1, const string &arg_2) {
00063     return starts (arg_1, arg_2);
00064   }
00065   
00066   static bool
00067   GLUE_12 (const string &arg_1, const string &arg_2) {
00068     return ends (arg_1, arg_2);
00069   }
00070   
00071   static string
00072   GLUE_13 (const string &arg_1, const string &arg_2, const string &arg_3) {
00073     return replace (arg_1, arg_2, arg_3);
00074   }
00075   
00076   static int
00077   GLUE_14 (const string &arg_1, const string &arg_2, const int &arg_3) {
00078     return search_forwards (arg_1, arg_2, arg_3);
00079   }
00080   
00081   static int
00082   GLUE_15 (const string &arg_1, const string &arg_2, const int &arg_3) {
00083     return search_backwards (arg_1, arg_2, arg_3);
00084   }
00085   
00086   static string
00087   GLUE_16 (const string &arg_1) {
00088     return upcase (arg_1);
00089   }
00090   
00091   static string
00092   GLUE_17 (const string &arg_1) {
00093     return locase (arg_1);
00094   }
00095   
00096   static string
00097   GLUE_18 (const string &arg_1) {
00098     return upcase_first (arg_1);
00099   }
00100   
00101   static string
00102   GLUE_19 (const string &arg_1) {
00103     return locase_first (arg_1);
00104   }
00105   
00106   static string
00107   GLUE_20 (const string &arg_1) {
00108     return quote (arg_1);
00109   }
00110   
00111   static string
00112   GLUE_21 (const string &arg_1) {
00113     return unquote (arg_1);
00114   }
00115   
00116   static string
00117   GLUE_22 (const int &arg_1) {
00118     return charcode_as_string (arg_1);
00119   }
00120   
00121   static int
00122   GLUE_23 (const string &arg_1) {
00123     return string_as_charcode (arg_1);
00124   }
00125   
00126   void
00127   glue_string () {
00128     static bool done = false;
00129     if (done) return;
00130     done = true;
00131     call_glue (string ("glue_basix_vector_generic"));
00132     define ("string?", GLUE_1);
00133     define ("#", GLUE_2);
00134     define (".[]", GLUE_3);
00135     define ("*", GLUE_4);
00136     define ("><", GLUE_5);
00137     define ("<<", GLUE_6);
00138     define ("<", GLUE_7);
00139     define ("<=", GLUE_8);
00140     define (">", GLUE_9);
00141     define (">=", GLUE_10);
00142     define ("starts?", GLUE_11);
00143     define ("ends?", GLUE_12);
00144     define ("replace", GLUE_13);
00145     define ("search_forwards", GLUE_14);
00146     define ("search_backwards", GLUE_15);
00147     define ("upcase", GLUE_16);
00148     define ("locase", GLUE_17);
00149     define ("upcase_first", GLUE_18);
00150     define ("locase_first", GLUE_19);
00151     define ("quote", GLUE_20);
00152     define ("unquote", GLUE_21);
00153     define ("ascii", GLUE_22);
00154     define ("ascii_code", GLUE_23);
00155   }
00156 }