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 }