00001 00002 #include <basix/int.hpp> 00003 #include <basix/literal.hpp> 00004 #include <basix/glue.hpp> 00005 00006 #define int_literal(x) as_int (as_string (x)) 00007 00008 namespace mmx { 00009 static int 00010 GLUE_1 (const literal &arg_1) { 00011 return int_literal (arg_1); 00012 } 00013 00014 static int 00015 GLUE_2 (const string &arg_1) { 00016 return as_int (arg_1); 00017 } 00018 00019 static string 00020 GLUE_3 (const int &arg_1) { 00021 return as_string (arg_1); 00022 } 00023 00024 static string 00025 GLUE_4 (const int &arg_1) { 00026 return as_string_hexa (arg_1); 00027 } 00028 00029 static int 00030 GLUE_5 (const int &arg_1) { 00031 return -arg_1; 00032 } 00033 00034 static int 00035 GLUE_6 (const int &arg_1) { 00036 return square (arg_1); 00037 } 00038 00039 static int 00040 GLUE_7 (const int &arg_1, const int &arg_2) { 00041 return arg_1 + arg_2; 00042 } 00043 00044 static int 00045 GLUE_8 (const int &arg_1, const int &arg_2) { 00046 return arg_1 - arg_2; 00047 } 00048 00049 static int 00050 GLUE_9 (const int &arg_1, const int &arg_2) { 00051 return arg_1 * arg_2; 00052 } 00053 00054 static int 00055 GLUE_10 (const int &arg_1, const int &arg_2) { 00056 return arg_1 / arg_2; 00057 } 00058 00059 static int 00060 GLUE_11 (const int &arg_1, const int &arg_2) { 00061 return quo (arg_1, arg_2); 00062 } 00063 00064 static int 00065 GLUE_12 (const int &arg_1, const int &arg_2) { 00066 return rem (arg_1, arg_2); 00067 } 00068 00069 static bool 00070 GLUE_13 (const int &arg_1, const int &arg_2) { 00071 return arg_1 == arg_2; 00072 } 00073 00074 static bool 00075 GLUE_14 (const int &arg_1, const int &arg_2) { 00076 return arg_1 != arg_2; 00077 } 00078 00079 static bool 00080 GLUE_15 (const int &arg_1, const int &arg_2) { 00081 return arg_1 < arg_2; 00082 } 00083 00084 static bool 00085 GLUE_16 (const int &arg_1, const int &arg_2) { 00086 return arg_1 <= arg_2; 00087 } 00088 00089 static bool 00090 GLUE_17 (const int &arg_1, const int &arg_2) { 00091 return arg_1 > arg_2; 00092 } 00093 00094 static bool 00095 GLUE_18 (const int &arg_1, const int &arg_2) { 00096 return arg_1 >= arg_2; 00097 } 00098 00099 static int 00100 GLUE_19 (const int &arg_1) { 00101 return sign (arg_1); 00102 } 00103 00104 static int 00105 GLUE_20 (const int &arg_1) { 00106 return abs (arg_1); 00107 } 00108 00109 static int 00110 GLUE_21 (const int &arg_1, const int &arg_2) { 00111 return min (arg_1, arg_2); 00112 } 00113 00114 static int 00115 GLUE_22 (const int &arg_1, const int &arg_2) { 00116 return max (arg_1, arg_2); 00117 } 00118 00119 static int 00120 GLUE_23 (const int &arg_1, const int &arg_2) { 00121 return min (arg_1, arg_2); 00122 } 00123 00124 static int 00125 GLUE_24 (const int &arg_1, const int &arg_2) { 00126 return max (arg_1, arg_2); 00127 } 00128 00129 static int 00130 GLUE_25 (const int &arg_1, const int &arg_2) { 00131 return arg_1 & arg_2; 00132 } 00133 00134 static int 00135 GLUE_26 (const int &arg_1, const int &arg_2) { 00136 return arg_1 | arg_2; 00137 } 00138 00139 static int 00140 GLUE_27 (const int &arg_1, const int &arg_2) { 00141 return arg_1 ^ arg_2; 00142 } 00143 00144 static int 00145 GLUE_28 (const int &arg_1) { 00146 return floor_sqrt (arg_1); 00147 } 00148 00149 static bool 00150 GLUE_29 (const int &arg_1, const int &arg_2) { 00151 return divides (arg_1, arg_2); 00152 } 00153 00154 static int 00155 GLUE_30 () { 00156 return rand (); 00157 } 00158 00159 void 00160 glue_int () { 00161 static bool done = false; 00162 if (done) return; 00163 done = true; 00164 define_type<int > (lit ("Int")); 00165 define ("literal_integer", GLUE_1); 00166 define ("as_int", GLUE_2); 00167 define ("as_string", GLUE_3); 00168 define ("as_string_hexa", GLUE_4); 00169 define ("-", GLUE_5); 00170 define ("square", GLUE_6); 00171 define ("+", GLUE_7); 00172 define ("-", GLUE_8); 00173 define ("*", GLUE_9); 00174 define ("div", GLUE_10); 00175 define ("quo", GLUE_11); 00176 define ("rem", GLUE_12); 00177 define ("=", GLUE_13); 00178 define ("!=", GLUE_14); 00179 define ("<", GLUE_15); 00180 define ("<=", GLUE_16); 00181 define (">", GLUE_17); 00182 define (">=", GLUE_18); 00183 define ("sign", GLUE_19); 00184 define ("abs", GLUE_20); 00185 define ("min", GLUE_21); 00186 define ("max", GLUE_22); 00187 define ("inf", GLUE_23); 00188 define ("sup", GLUE_24); 00189 define ("/\\", GLUE_25); 00190 define ("\\/", GLUE_26); 00191 define ("xor", GLUE_27); 00192 define ("floor_sqrt", GLUE_28); 00193 define ("divides?", GLUE_29); 00194 define ("random", GLUE_30); 00195 define_constant<int > ("int_minus_infinity", int_minus_infinity); 00196 define_constant<int > ("int_plus_infinity", int_plus_infinity); 00197 } 00198 }