| 94 | |
| 95 | template<typename ScalarType> |
| 96 | af_err replaceScalar(af_array a, const af_array cond, const ScalarType b) { |
| 97 | try { |
| 98 | const ArrayInfo& ainfo = getInfo(a); |
| 99 | const ArrayInfo& cinfo = getInfo(cond); |
| 100 | |
| 101 | ARG_ASSERT(1, cinfo.getType() == b8); |
| 102 | DIM_ASSERT(1, cinfo.ndims() == ainfo.ndims()); |
| 103 | |
| 104 | dim4 adims = ainfo.dims(); |
| 105 | dim4 cdims = cinfo.dims(); |
| 106 | |
| 107 | for (int i = 0; i < 4; i++) { DIM_ASSERT(1, cdims[i] == adims[i]); } |
| 108 | |
| 109 | switch (ainfo.getType()) { |
| 110 | case f16: replace_scalar<half>(a, cond, b); break; |
| 111 | case f32: replace_scalar<float>(a, cond, b); break; |
| 112 | case f64: replace_scalar<double>(a, cond, b); break; |
| 113 | case c32: replace_scalar<cfloat>(a, cond, b); break; |
| 114 | case c64: replace_scalar<cdouble>(a, cond, b); break; |
| 115 | case s32: replace_scalar<int>(a, cond, b); break; |
| 116 | case u32: replace_scalar<uint>(a, cond, b); break; |
| 117 | case s64: replace_scalar<intl>(a, cond, b); break; |
| 118 | case u64: replace_scalar<uintl>(a, cond, b); break; |
| 119 | case s16: replace_scalar<short>(a, cond, b); break; |
| 120 | case u16: replace_scalar<ushort>(a, cond, b); break; |
| 121 | case s8: replace_scalar<schar>(a, cond, b); break; |
| 122 | case u8: replace_scalar<uchar>(a, cond, b); break; |
| 123 | case b8: replace_scalar<char>(a, cond, b); break; |
| 124 | default: TYPE_ERROR(2, ainfo.getType()); |
| 125 | } |
| 126 | } |
| 127 | CATCHALL; |
| 128 | return AF_SUCCESS; |
| 129 | } |
| 130 | |
| 131 | af_err af_replace_scalar(af_array a, const af_array cond, const double b) { |
| 132 | return replaceScalar(a, cond, b); |
no test coverage detected