| 271 | } |
| 272 | |
| 273 | af_err af_eval(af_array arr) { |
| 274 | try { |
| 275 | const ArrayInfo& info = getInfo(arr, false); |
| 276 | af_dtype type = info.getType(); |
| 277 | |
| 278 | if (info.isSparse()) { |
| 279 | switch (type) { |
| 280 | case f32: sparseEval<float>(arr); break; |
| 281 | case f64: sparseEval<double>(arr); break; |
| 282 | case c32: sparseEval<cfloat>(arr); break; |
| 283 | case c64: sparseEval<cdouble>(arr); break; |
| 284 | default: TYPE_ERROR(0, type); |
| 285 | } |
| 286 | } else { |
| 287 | switch (type) { |
| 288 | case f32: eval<float>(arr); break; |
| 289 | case f64: eval<double>(arr); break; |
| 290 | case c32: eval<cfloat>(arr); break; |
| 291 | case c64: eval<cdouble>(arr); break; |
| 292 | case s32: eval<int>(arr); break; |
| 293 | case u32: eval<uint>(arr); break; |
| 294 | case s8: eval<schar>(arr); break; |
| 295 | case u8: eval<uchar>(arr); break; |
| 296 | case b8: eval<char>(arr); break; |
| 297 | case s64: eval<intl>(arr); break; |
| 298 | case u64: eval<uintl>(arr); break; |
| 299 | case s16: eval<short>(arr); break; |
| 300 | case u16: eval<ushort>(arr); break; |
| 301 | case f16: eval<half>(arr); break; |
| 302 | default: TYPE_ERROR(0, type); |
| 303 | } |
| 304 | } |
| 305 | } |
| 306 | CATCHALL; |
| 307 | |
| 308 | return AF_SUCCESS; |
| 309 | } |
| 310 | |
| 311 | template<typename T> |
| 312 | static inline void evalMultiple(int num, af_array* arrayPtrs) { |