NUMPY_API * Gets the current iteration index */
| 689 | * Gets the current iteration index |
| 690 | */ |
| 691 | NPY_NO_EXPORT npy_intp |
| 692 | NpyIter_GetIterIndex(NpyIter *iter) |
| 693 | { |
| 694 | npy_uint32 itflags = NIT_ITFLAGS(iter); |
| 695 | int idim, ndim = NIT_NDIM(iter); |
| 696 | int nop = NIT_NOP(iter); |
| 697 | |
| 698 | /* iterindex is only used if NPY_ITER_RANGED or NPY_ITER_BUFFERED was set */ |
| 699 | if (itflags&(NPY_ITFLAG_RANGE|NPY_ITFLAG_BUFFER)) { |
| 700 | return NIT_ITERINDEX(iter); |
| 701 | } |
| 702 | else { |
| 703 | npy_intp iterindex; |
| 704 | NpyIter_AxisData *axisdata; |
| 705 | npy_intp sizeof_axisdata; |
| 706 | |
| 707 | iterindex = 0; |
| 708 | if (ndim == 0) { |
| 709 | return 0; |
| 710 | } |
| 711 | sizeof_axisdata = NIT_AXISDATA_SIZEOF(itflags, ndim, nop); |
| 712 | axisdata = NIT_INDEX_AXISDATA(NIT_AXISDATA(iter), ndim-1); |
| 713 | |
| 714 | for (idim = ndim-2; idim >= 0; --idim) { |
| 715 | iterindex += NAD_INDEX(axisdata); |
| 716 | NIT_ADVANCE_AXISDATA(axisdata, -1); |
| 717 | iterindex *= NAD_SHAPE(axisdata); |
| 718 | } |
| 719 | iterindex += NAD_INDEX(axisdata); |
| 720 | |
| 721 | return iterindex; |
| 722 | } |
| 723 | } |
| 724 | |
| 725 | /*NUMPY_API |
| 726 | * Whether the buffer allocation is being delayed |
no outgoing calls
no test coverage detected