| 162 | } |
| 163 | |
| 164 | void af_approx2_common(af_array *zo, const af_array zi, const af_array xo, |
| 165 | const int xdim, const double xi_beg, |
| 166 | const double xi_step, const af_array yo, const int ydim, |
| 167 | const double yi_beg, const double yi_step, |
| 168 | const af_interp_type method, const float offGrid, |
| 169 | bool allocate_zo) { |
| 170 | ARG_ASSERT(0, zo != 0); // *zo (the af_array) can be null, but not zo |
| 171 | ARG_ASSERT(1, zi != 0); |
| 172 | ARG_ASSERT(2, xo != 0); |
| 173 | ARG_ASSERT(6, yo != 0); |
| 174 | |
| 175 | const ArrayInfo &zi_info = getInfo(zi); |
| 176 | const ArrayInfo &xo_info = getInfo(xo); |
| 177 | const ArrayInfo &yo_info = getInfo(yo); |
| 178 | |
| 179 | dim4 zi_dims = zi_info.dims(); |
| 180 | dim4 xo_dims = xo_info.dims(); |
| 181 | dim4 yo_dims = yo_info.dims(); |
| 182 | |
| 183 | ARG_ASSERT(1, zi_info.isFloating()); // Only floating and complex types |
| 184 | ARG_ASSERT(2, xo_info.isRealFloating()); // Only floating types |
| 185 | ARG_ASSERT(4, yo_info.isRealFloating()); // Only floating types |
| 186 | ARG_ASSERT(2, |
| 187 | xo_info.getType() == yo_info.getType()); // Must have same type |
| 188 | ARG_ASSERT(1, zi_info.isSingle() == |
| 189 | xo_info.isSingle()); // Must have same precision |
| 190 | ARG_ASSERT(1, zi_info.isDouble() == |
| 191 | xo_info.isDouble()); // Must have same precision |
| 192 | DIM_ASSERT(2, xo_dims == yo_dims); // POS0 and POS1 must have same dims |
| 193 | |
| 194 | ARG_ASSERT(3, xdim >= 0 && xdim < 4); |
| 195 | ARG_ASSERT(5, ydim >= 0 && ydim < 4); |
| 196 | ARG_ASSERT(7, xi_step != 0); |
| 197 | ARG_ASSERT(9, yi_step != 0); |
| 198 | |
| 199 | // POS should either be (x, y, 1, 1) or (x, y, zi_dims[2], zi_dims[3]) |
| 200 | if (xo_dims[xdim] * xo_dims[ydim] != xo_dims.elements()) { |
| 201 | for (int i = 0; i < 4; i++) { |
| 202 | if (xdim != i && ydim != i) { |
| 203 | DIM_ASSERT(2, xo_dims[i] == zi_dims[i]); |
| 204 | } |
| 205 | } |
| 206 | } |
| 207 | |
| 208 | if (zi_dims.ndims() == 0 || xo_dims.ndims() == 0 || yo_dims.ndims() == 0) { |
| 209 | af_create_handle(zo, 0, nullptr, zi_info.getType()); |
| 210 | return; |
| 211 | } |
| 212 | |
| 213 | dim4 zo_dims = zi_info.dims(); |
| 214 | zo_dims[xdim] = xo_info.dims()[xdim]; |
| 215 | zo_dims[ydim] = xo_info.dims()[ydim]; |
| 216 | |
| 217 | if (allocate_zo) { *zo = createHandle(zo_dims, zi_info.getType()); } |
| 218 | |
| 219 | DIM_ASSERT(0, getInfo(*zo).dims() == zo_dims); |
| 220 | |
| 221 | switch (zi_info.getType()) { |
no test coverage detected