* Computes the iterator's index strides and initializes the index values * to zero. * * This must be called before the axes (i.e. the AXISDATA array) may * be reordered. */
| 2038 | * be reordered. |
| 2039 | */ |
| 2040 | static void |
| 2041 | npyiter_compute_index_strides(NpyIter *iter, npy_uint32 flags) |
| 2042 | { |
| 2043 | npy_uint32 itflags = NIT_ITFLAGS(iter); |
| 2044 | int idim, ndim = NIT_NDIM(iter); |
| 2045 | int nop = NIT_NOP(iter); |
| 2046 | |
| 2047 | npy_intp indexstride; |
| 2048 | NpyIter_AxisData *axisdata; |
| 2049 | npy_intp sizeof_axisdata; |
| 2050 | |
| 2051 | /* |
| 2052 | * If there is only one element being iterated, we just have |
| 2053 | * to touch the first AXISDATA because nothing will ever be |
| 2054 | * incremented. This also initializes the data for the 0-d case. |
| 2055 | */ |
| 2056 | if (NIT_ITERSIZE(iter) == 1) { |
| 2057 | if (itflags & NPY_ITFLAG_HASINDEX) { |
| 2058 | axisdata = NIT_AXISDATA(iter); |
| 2059 | NAD_PTRS(axisdata)[nop] = 0; |
| 2060 | } |
| 2061 | return; |
| 2062 | } |
| 2063 | |
| 2064 | if (flags & NPY_ITER_C_INDEX) { |
| 2065 | sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop); |
| 2066 | axisdata = NIT_AXISDATA(iter); |
| 2067 | indexstride = 1; |
| 2068 | for(idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, 1)) { |
| 2069 | npy_intp shape = NAD_SHAPE(axisdata); |
| 2070 | |
| 2071 | if (shape == 1) { |
| 2072 | NAD_STRIDES(axisdata)[nop] = 0; |
| 2073 | } |
| 2074 | else { |
| 2075 | NAD_STRIDES(axisdata)[nop] = indexstride; |
| 2076 | } |
| 2077 | NAD_PTRS(axisdata)[nop] = 0; |
| 2078 | indexstride *= shape; |
| 2079 | } |
| 2080 | } |
| 2081 | else if (flags & NPY_ITER_F_INDEX) { |
| 2082 | sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop); |
| 2083 | axisdata = NIT_INDEX_AXISDATA(NIT_AXISDATA(iter), ndim-1); |
| 2084 | indexstride = 1; |
| 2085 | for(idim = 0; idim < ndim; ++idim, NIT_ADVANCE_AXISDATA(axisdata, -1)) { |
| 2086 | npy_intp shape = NAD_SHAPE(axisdata); |
| 2087 | |
| 2088 | if (shape == 1) { |
| 2089 | NAD_STRIDES(axisdata)[nop] = 0; |
| 2090 | } |
| 2091 | else { |
| 2092 | NAD_STRIDES(axisdata)[nop] = indexstride; |
| 2093 | } |
| 2094 | NAD_PTRS(axisdata)[nop] = 0; |
| 2095 | indexstride *= shape; |
| 2096 | } |
| 2097 | } |
no outgoing calls
no test coverage detected