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 }