00001
00002 #include <basix/int.hpp>
00003 #include <basix/vector.hpp>
00004 #include <algebramix/vector_unrolled.hpp>
00005 #include <algebramix/vector_simd.hpp>
00006 #include <basix/tuple.hpp>
00007 #include <basix/alias.hpp>
00008 #include <basix/glue.hpp>
00009
00010 #define int_literal(x) as_int (as_string (x))
00011
00012 namespace mmx {
00013 static vector<int>
00014 GLUE_1 (const tuple<int> &arg_1) {
00015 return vector<int > (as_vector (arg_1));
00016 }
00017
00018 static vector<int>
00019 GLUE_2 (const tuple<int> &arg_1) {
00020 return vector<int > (as_vector (arg_1));
00021 }
00022
00023 static iterator<generic>
00024 GLUE_3 (const vector<int> &arg_1) {
00025 return as<iterator<generic> > (iterate (arg_1));
00026 }
00027
00028 static int
00029 GLUE_4 (const vector<int> &arg_1) {
00030 return N (arg_1);
00031 }
00032
00033 static int
00034 GLUE_5 (const vector<int> &arg_1, const int &arg_2) {
00035 return arg_1[arg_2];
00036 }
00037
00038 static alias<int>
00039 GLUE_6 (const alias<vector<int> > &arg_1, const int &arg_2) {
00040 return alias_access<int > (arg_1, arg_2);
00041 }
00042
00043 static vector<int>
00044 GLUE_7 (const vector<int> &arg_1, const int &arg_2, const int &arg_3) {
00045 return range (arg_1, arg_2, arg_3);
00046 }
00047
00048 static vector<int>
00049 GLUE_8 (const vector<int> &arg_1) {
00050 return reverse (arg_1);
00051 }
00052
00053 static vector<int>
00054 GLUE_9 (const vector<int> &arg_1, const vector<int> &arg_2) {
00055 return append (arg_1, arg_2);
00056 }
00057
00058 static alias<vector<int> >
00059 GLUE_10 (const alias<vector<int> > &arg_1, const vector<int> &arg_2) {
00060 return alias_write (arg_1, arg_2);
00061 }
00062
00063 static vector<int>
00064 GLUE_11 (const int &arg_1, const vector<int> &arg_2) {
00065 return cons (arg_1, arg_2);
00066 }
00067
00068 static int
00069 GLUE_12 (const vector<int> &arg_1) {
00070 return car (arg_1);
00071 }
00072
00073 static vector<int>
00074 GLUE_13 (const vector<int> &arg_1) {
00075 return cdr (arg_1);
00076 }
00077
00078 static bool
00079 GLUE_14 (const vector<int> &arg_1) {
00080 return is_nil (arg_1);
00081 }
00082
00083 static bool
00084 GLUE_15 (const vector<int> &arg_1) {
00085 return is_atom (arg_1);
00086 }
00087
00088 static vector<int>
00089 GLUE_16 (const vector<int> &arg_1, const int &arg_2) {
00090 return insert (arg_1, arg_2);
00091 }
00092
00093 static int
00094 GLUE_17 (const vector<int> &arg_1, const int &arg_2) {
00095 return find (arg_1, arg_2);
00096 }
00097
00098 static bool
00099 GLUE_18 (const vector<int> &arg_1, const int &arg_2) {
00100 return contains (arg_1, arg_2);
00101 }
00102
00103 static vector<generic>
00104 GLUE_19 (const vector<int> &arg_1) {
00105 return as<vector<generic> > (arg_1);
00106 }
00107
00108 static vector<int>
00109 GLUE_20 (const vector<int> &arg_1) {
00110 return -arg_1;
00111 }
00112
00113 static vector<int>
00114 GLUE_21 (const vector<int> &arg_1) {
00115 return square (arg_1);
00116 }
00117
00118 static vector<int>
00119 GLUE_22 (const vector<int> &arg_1, const vector<int> &arg_2) {
00120 return arg_1 + arg_2;
00121 }
00122
00123 static vector<int>
00124 GLUE_23 (const vector<int> &arg_1, const vector<int> &arg_2) {
00125 return arg_1 - arg_2;
00126 }
00127
00128 static vector<int>
00129 GLUE_24 (const vector<int> &arg_1, const vector<int> &arg_2) {
00130 return arg_1 * arg_2;
00131 }
00132
00133 static vector<int>
00134 GLUE_25 (const int &arg_1, const vector<int> &arg_2) {
00135 return arg_1 + arg_2;
00136 }
00137
00138 static vector<int>
00139 GLUE_26 (const vector<int> &arg_1, const int &arg_2) {
00140 return arg_1 + arg_2;
00141 }
00142
00143 static vector<int>
00144 GLUE_27 (const int &arg_1, const vector<int> &arg_2) {
00145 return arg_1 - arg_2;
00146 }
00147
00148 static vector<int>
00149 GLUE_28 (const vector<int> &arg_1, const int &arg_2) {
00150 return arg_1 - arg_2;
00151 }
00152
00153 static vector<int>
00154 GLUE_29 (const int &arg_1, const vector<int> &arg_2) {
00155 return arg_1 * arg_2;
00156 }
00157
00158 static vector<int>
00159 GLUE_30 (const vector<int> &arg_1, const int &arg_2) {
00160 return arg_1 * arg_2;
00161 }
00162
00163 static int
00164 GLUE_31 (const vector<int> &arg_1, const vector<int> &arg_2) {
00165 return dot (arg_1, arg_2);
00166 }
00167
00168 static int
00169 GLUE_32 (const vector<int> &arg_1) {
00170 return big_mul (arg_1);
00171 }
00172
00173 static int
00174 GLUE_33 (const vector<int> &arg_1) {
00175 return big_add (arg_1);
00176 }
00177
00178 static bool
00179 GLUE_34 (const vector<int> &arg_1, const vector<int> &arg_2) {
00180 return arg_1 == arg_2;
00181 }
00182
00183 static bool
00184 GLUE_35 (const vector<int> &arg_1, const vector<int> &arg_2) {
00185 return arg_1 != arg_2;
00186 }
00187
00188 static bool
00189 GLUE_36 (const vector<int> &arg_1, const int &arg_2) {
00190 return arg_1 == arg_2;
00191 }
00192
00193 static bool
00194 GLUE_37 (const vector<int> &arg_1, const int &arg_2) {
00195 return arg_1 != arg_2;
00196 }
00197
00198 static bool
00199 GLUE_38 (const int &arg_1, const vector<int> &arg_2) {
00200 return arg_1 == arg_2;
00201 }
00202
00203 static bool
00204 GLUE_39 (const int &arg_1, const vector<int> &arg_2) {
00205 return arg_1 != arg_2;
00206 }
00207
00208 static bool
00209 GLUE_40 (const vector<int> &arg_1, const vector<int> &arg_2) {
00210 return arg_1 <= arg_2;
00211 }
00212
00213 static bool
00214 GLUE_41 (const vector<int> &arg_1, const vector<int> &arg_2) {
00215 return arg_1 >= arg_2;
00216 }
00217
00218 static bool
00219 GLUE_42 (const vector<int> &arg_1, const vector<int> &arg_2) {
00220 return arg_1 < arg_2;
00221 }
00222
00223 static bool
00224 GLUE_43 (const vector<int> &arg_1, const vector<int> &arg_2) {
00225 return arg_1 > arg_2;
00226 }
00227
00228 static bool
00229 GLUE_44 (const vector<int> &arg_1, const int &arg_2) {
00230 return arg_1 <= arg_2;
00231 }
00232
00233 static bool
00234 GLUE_45 (const vector<int> &arg_1, const int &arg_2) {
00235 return arg_1 >= arg_2;
00236 }
00237
00238 static bool
00239 GLUE_46 (const vector<int> &arg_1, const int &arg_2) {
00240 return arg_1 < arg_2;
00241 }
00242
00243 static bool
00244 GLUE_47 (const vector<int> &arg_1, const int &arg_2) {
00245 return arg_1 > arg_2;
00246 }
00247
00248 static bool
00249 GLUE_48 (const int &arg_1, const vector<int> &arg_2) {
00250 return arg_1 <= arg_2;
00251 }
00252
00253 static bool
00254 GLUE_49 (const int &arg_1, const vector<int> &arg_2) {
00255 return arg_1 >= arg_2;
00256 }
00257
00258 static bool
00259 GLUE_50 (const int &arg_1, const vector<int> &arg_2) {
00260 return arg_1 < arg_2;
00261 }
00262
00263 static bool
00264 GLUE_51 (const int &arg_1, const vector<int> &arg_2) {
00265 return arg_1 > arg_2;
00266 }
00267
00268 static vector<int>
00269 GLUE_52 (const vector<int> &arg_1, const vector<int> &arg_2) {
00270 return inf (arg_1, arg_2);
00271 }
00272
00273 static vector<int>
00274 GLUE_53 (const vector<int> &arg_1, const vector<int> &arg_2) {
00275 return sup (arg_1, arg_2);
00276 }
00277
00278 void
00279 glue_vector_int () {
00280 static bool done = false;
00281 if (done) return;
00282 done = true;
00283 call_glue (string ("glue_int"));
00284 call_glue (string ("glue_vector_generic"));
00285 define_type<vector<int> > (gen (lit ("Vector"), lit ("Int")));
00286 define ("vector", GLUE_1);
00287 define ("[]", GLUE_2);
00288 define_converter (":>", GLUE_3, PENALTY_CAST);
00289 define ("#", GLUE_4);
00290 define (".[]", GLUE_5);
00291 define (".[]", GLUE_6);
00292 define (".[]", GLUE_7);
00293 define ("reverse", GLUE_8);
00294 define ("><", GLUE_9);
00295 define ("<<", GLUE_10);
00296 define ("cons", GLUE_11);
00297 define ("car", GLUE_12);
00298 define ("cdr", GLUE_13);
00299 define ("nil?", GLUE_14);
00300 define ("atom?", GLUE_15);
00301 define ("insert", GLUE_16);
00302 define ("find", GLUE_17);
00303 define ("contains?", GLUE_18);
00304 define_converter (":>", GLUE_19, PENALTY_PROMOTE_GENERIC);
00305 define ("-", GLUE_20);
00306 define ("square", GLUE_21);
00307 define ("+", GLUE_22);
00308 define ("-", GLUE_23);
00309 define ("*", GLUE_24);
00310 define ("+", GLUE_25);
00311 define ("+", GLUE_26);
00312 define ("-", GLUE_27);
00313 define ("-", GLUE_28);
00314 define ("*", GLUE_29);
00315 define ("*", GLUE_30);
00316 define ("dot", GLUE_31);
00317 define ("big_mul", GLUE_32);
00318 define ("big_add", GLUE_33);
00319 define ("=", GLUE_34);
00320 define ("!=", GLUE_35);
00321 define ("=", GLUE_36);
00322 define ("!=", GLUE_37);
00323 define ("=", GLUE_38);
00324 define ("!=", GLUE_39);
00325 define ("<=", GLUE_40);
00326 define (">=", GLUE_41);
00327 define ("<", GLUE_42);
00328 define (">", GLUE_43);
00329 define ("<=", GLUE_44);
00330 define (">=", GLUE_45);
00331 define ("<", GLUE_46);
00332 define (">", GLUE_47);
00333 define ("<=", GLUE_48);
00334 define (">=", GLUE_49);
00335 define ("<", GLUE_50);
00336 define (">", GLUE_51);
00337 define ("inf", GLUE_52);
00338 define ("sup", GLUE_53);
00339 }
00340 }