| 96 | } |
| 97 | |
| 98 | af_err af_real(af_array *out, const af_array in) { |
| 99 | try { |
| 100 | const ArrayInfo &info = getInfo(in); |
| 101 | af_dtype type = info.getType(); |
| 102 | |
| 103 | if (type != c32 && type != c64) { return af_retain_array(out, in); } |
| 104 | if (info.ndims() == 0) { return af_retain_array(out, in); } |
| 105 | |
| 106 | af_array res; |
| 107 | switch (type) { |
| 108 | case c32: |
| 109 | res = getHandle(real<float, cfloat>(getArray<cfloat>(in))); |
| 110 | break; |
| 111 | case c64: |
| 112 | res = getHandle(real<double, cdouble>(getArray<cdouble>(in))); |
| 113 | break; |
| 114 | |
| 115 | default: TYPE_ERROR(0, type); |
| 116 | } |
| 117 | |
| 118 | std::swap(*out, res); |
| 119 | } |
| 120 | CATCHALL; |
| 121 | return AF_SUCCESS; |
| 122 | } |
| 123 | |
| 124 | af_err af_imag(af_array *out, const af_array in) { |
| 125 | try { |