diff options
author | Mark Wiebe <mwwiebe@gmail.com> | 2011-01-16 13:57:44 -0800 |
---|---|---|
committer | Mark Wiebe <mwwiebe@gmail.com> | 2011-01-16 13:57:44 -0800 |
commit | eb927cee8832dc13da53b13582ba0c970c3f3154 (patch) | |
tree | 659fbd5525d15ef6fc79d1799e650d563cd709f1 /numpy | |
parent | 4f84b99ceb1e125e113b0fec0bb49bef1f4bd9ea (diff) | |
download | numpy-eb927cee8832dc13da53b13582ba0c970c3f3154.tar.gz |
ENH: iter: Change PyArray_StridedTransferFn typedef to match NumPy function typedefs
Diffstat (limited to 'numpy')
-rw-r--r-- | numpy/core/src/multiarray/dtype_transfer.c | 129 | ||||
-rw-r--r-- | numpy/core/src/multiarray/lowlevel_strided_loops.c.src | 8 | ||||
-rw-r--r-- | numpy/core/src/multiarray/lowlevel_strided_loops.h | 16 | ||||
-rw-r--r-- | numpy/core/src/multiarray/new_iterator.c.src | 14 |
4 files changed, 95 insertions, 72 deletions
diff --git a/numpy/core/src/multiarray/dtype_transfer.c b/numpy/core/src/multiarray/dtype_transfer.c index dedcc3fdd..f0f2c1b7a 100644 --- a/numpy/core/src/multiarray/dtype_transfer.c +++ b/numpy/core/src/multiarray/dtype_transfer.c @@ -26,7 +26,7 @@ static int get_decsrcref_transfer_function(int aligned, npy_intp src_stride, PyArray_Descr *src_dtype, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata); /* @@ -38,7 +38,7 @@ static int get_setdstzero_transfer_function(int aligned, npy_intp dst_stride, PyArray_Descr *dst_dtype, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata); @@ -146,7 +146,7 @@ NPY_NO_EXPORT int PyArray_GetStridedZeroPadCopyFn(int aligned, npy_intp src_stride, npy_intp dst_stride, npy_intp src_itemsize, npy_intp dst_itemsize, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { if (src_itemsize >= dst_itemsize) { @@ -181,8 +181,8 @@ PyArray_GetStridedZeroPadCopyFn(int aligned, /* Wraps a transfer function + data in alignment code */ typedef struct { void *freefunc, *copyfunc; - PyArray_StridedTransferFn wrapped, - tobuffer, frombuffer; + PyArray_StridedTransferFn *wrapped, + *tobuffer, *frombuffer; void *wrappeddata, *todata, *fromdata; npy_intp src_itemsize, dst_itemsize; char *bufferin, *bufferout; @@ -255,9 +255,9 @@ _strided_to_strided_contig_align_wrap(char *dst, npy_intp dst_stride, void *data) { _align_wrap_data *d = (_align_wrap_data *)data; - PyArray_StridedTransferFn wrapped = d->wrapped, - tobuffer = d->tobuffer, - frombuffer = d->frombuffer; + PyArray_StridedTransferFn *wrapped = d->wrapped, + *tobuffer = d->tobuffer, + *frombuffer = d->frombuffer; npy_intp dst_itemsize = d->dst_itemsize; void *wrappeddata = d->wrappeddata, *todata = d->todata, @@ -298,9 +298,9 @@ _strided_to_strided_contig_align_wrap_init_dest(char *dst, npy_intp dst_stride, void *data) { _align_wrap_data *d = (_align_wrap_data *)data; - PyArray_StridedTransferFn wrapped = d->wrapped, - tobuffer = d->tobuffer, - frombuffer = d->frombuffer; + PyArray_StridedTransferFn *wrapped = d->wrapped, + *tobuffer = d->tobuffer, + *frombuffer = d->frombuffer; npy_intp dst_itemsize = d->dst_itemsize; void *wrappeddata = d->wrappeddata, *todata = d->todata, @@ -354,11 +354,11 @@ _strided_to_strided_contig_align_wrap_init_dest(char *dst, npy_intp dst_stride, NPY_NO_EXPORT int wrap_aligned_contig_transfer_function( npy_intp src_itemsize, npy_intp dst_itemsize, - PyArray_StridedTransferFn tobuffer, void *todata, - PyArray_StridedTransferFn frombuffer, void *fromdata, - PyArray_StridedTransferFn wrapped, void *wrappeddata, + PyArray_StridedTransferFn *tobuffer, void *todata, + PyArray_StridedTransferFn *frombuffer, void *fromdata, + PyArray_StridedTransferFn *wrapped, void *wrappeddata, int init_dest, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { _align_wrap_data *data; @@ -451,7 +451,7 @@ wrap_copy_swap_function(int aligned, npy_intp src_stride, npy_intp dst_stride, PyArray_Descr *dtype, int should_swap, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { _wrap_copy_swap_data *data; @@ -581,7 +581,7 @@ get_cast_transfer_function(int aligned, npy_intp src_stride, npy_intp dst_stride, PyArray_Descr *src_dtype, PyArray_Descr *dst_dtype, int move_references, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { _strided_cast_data *data; @@ -661,7 +661,7 @@ get_cast_transfer_function(int aligned, } /* Otherwise, we have to copy and/or swap to aligned temporaries */ else { - PyArray_StridedTransferFn tobuffer, frombuffer, casttransfer; + PyArray_StridedTransferFn *tobuffer, *frombuffer, *casttransfer; /* Get the copy/swap operation from src */ @@ -765,11 +765,11 @@ get_cast_transfer_function(int aligned, /* Copies 1 element to N contiguous elements */ typedef struct { void *freefunc, *copyfunc; - PyArray_StridedTransferFn stransfer; + PyArray_StridedTransferFn *stransfer; void *data; npy_intp N, dst_itemsize; /* If this is non-NULL the source type has references needing a decref */ - PyArray_StridedTransferFn stransfer_finish_src; + PyArray_StridedTransferFn *stransfer_finish_src; void *data_finish_src; } _one_to_n_data; @@ -819,7 +819,7 @@ _strided_to_strided_one_to_n(char *dst, npy_intp dst_stride, void *data) { _one_to_n_data *d = (_one_to_n_data *)data; - PyArray_StridedTransferFn subtransfer = d->stransfer; + PyArray_StridedTransferFn *subtransfer = d->stransfer; void *subdata = d->data; npy_intp subN = d->N, dst_itemsize = d->dst_itemsize; @@ -842,8 +842,8 @@ _strided_to_strided_one_to_n_with_finish(char *dst, npy_intp dst_stride, void *data) { _one_to_n_data *d = (_one_to_n_data *)data; - PyArray_StridedTransferFn subtransfer = d->stransfer, - stransfer_finish_src = d->stransfer_finish_src; + PyArray_StridedTransferFn *subtransfer = d->stransfer, + *stransfer_finish_src = d->stransfer_finish_src; void *subdata = d->data, *data_finish_src = data_finish_src; npy_intp subN = d->N, dst_itemsize = d->dst_itemsize; @@ -873,13 +873,13 @@ _strided_to_strided_one_to_n_with_finish(char *dst, npy_intp dst_stride, */ static int wrap_transfer_function_one_to_n( - PyArray_StridedTransferFn stransfer_inner, + PyArray_StridedTransferFn *stransfer_inner, void *data_inner, - PyArray_StridedTransferFn stransfer_finish_src, + PyArray_StridedTransferFn *stransfer_finish_src, void *data_finish_src, npy_intp dst_itemsize, npy_intp N, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { _one_to_n_data *data; @@ -917,10 +917,10 @@ get_one_to_n_transfer_function(int aligned, PyArray_Descr *src_dtype, PyArray_Descr *dst_dtype, int move_references, npy_intp N, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { - PyArray_StridedTransferFn stransfer, stransfer_finish_src = NULL; + PyArray_StridedTransferFn *stransfer, *stransfer_finish_src = NULL; void *data, *data_finish_src = NULL; /* @@ -967,7 +967,7 @@ get_one_to_n_transfer_function(int aligned, /* Copies N contiguous elements to N contiguous elements */ typedef struct { void *freefunc, *copyfunc; - PyArray_StridedTransferFn stransfer; + PyArray_StridedTransferFn *stransfer; void *data; npy_intp N, src_itemsize, dst_itemsize; } _n_to_n_data; @@ -1008,7 +1008,7 @@ _strided_to_strided_n_to_n(char *dst, npy_intp dst_stride, void *data) { _n_to_n_data *d = (_n_to_n_data *)data; - PyArray_StridedTransferFn subtransfer = d->stransfer; + PyArray_StridedTransferFn *subtransfer = d->stransfer; void *subdata = d->data; npy_intp subN = d->N, src_subitemsize = d->src_itemsize, dst_subitemsize = d->dst_itemsize; @@ -1032,7 +1032,7 @@ _contig_to_contig_n_to_n(char *dst, npy_intp NPY_UNUSED(dst_stride), void *data) { _n_to_n_data *d = (_n_to_n_data *)data; - PyArray_StridedTransferFn subtransfer = d->stransfer; + PyArray_StridedTransferFn *subtransfer = d->stransfer; void *subdata = d->data; npy_intp subN = d->N, src_subitemsize = d->src_itemsize, dst_subitemsize = d->dst_itemsize; @@ -1049,12 +1049,12 @@ _contig_to_contig_n_to_n(char *dst, npy_intp NPY_UNUSED(dst_stride), */ static int wrap_transfer_function_n_to_n( - PyArray_StridedTransferFn stransfer_inner, + PyArray_StridedTransferFn *stransfer_inner, void *data_inner, npy_intp src_stride, npy_intp dst_stride, npy_intp src_itemsize, npy_intp dst_itemsize, npy_intp N, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { _n_to_n_data *data; @@ -1095,10 +1095,10 @@ get_n_to_n_transfer_function(int aligned, PyArray_Descr *src_dtype, PyArray_Descr *dst_dtype, int move_references, npy_intp N, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { - PyArray_StridedTransferFn stransfer; + PyArray_StridedTransferFn *stransfer; void *data; /* @@ -1135,12 +1135,12 @@ typedef struct { /* Copies element with subarray broadcasting */ typedef struct { void *freefunc, *copyfunc; - PyArray_StridedTransferFn stransfer; + PyArray_StridedTransferFn *stransfer; void *data; npy_intp src_N, dst_N, src_itemsize, dst_itemsize; - PyArray_StridedTransferFn stransfer_decsrcref; + PyArray_StridedTransferFn *stransfer_decsrcref; void *data_decsrcref; - PyArray_StridedTransferFn stransfer_decdstref; + PyArray_StridedTransferFn *stransfer_decdstref; void *data_decdstref; /* This gets a run-length encoded representation of the transfer */ npy_intp run_count; @@ -1209,7 +1209,7 @@ _strided_to_strided_subarray_broadcast(char *dst, npy_intp dst_stride, void *data) { _subarray_broadcast_data *d = (_subarray_broadcast_data *)data; - PyArray_StridedTransferFn subtransfer = d->stransfer; + PyArray_StridedTransferFn *subtransfer = d->stransfer; void *subdata = d->data; npy_intp run, run_count = d->run_count, src_subitemsize = d->src_itemsize, @@ -1250,11 +1250,11 @@ _strided_to_strided_subarray_broadcast_withrefs(char *dst, npy_intp dst_stride, void *data) { _subarray_broadcast_data *d = (_subarray_broadcast_data *)data; - PyArray_StridedTransferFn subtransfer = d->stransfer; + PyArray_StridedTransferFn *subtransfer = d->stransfer; void *subdata = d->data; - PyArray_StridedTransferFn stransfer_decsrcref = d->stransfer_decsrcref; + PyArray_StridedTransferFn *stransfer_decsrcref = d->stransfer_decsrcref; void *data_decsrcref = d->data_decsrcref; - PyArray_StridedTransferFn stransfer_decdstref = d->stransfer_decdstref; + PyArray_StridedTransferFn *stransfer_decdstref = d->stransfer_decdstref; void *data_decdstref = d->data_decdstref; npy_intp run, run_count = d->run_count, src_subitemsize = d->src_itemsize, @@ -1307,7 +1307,7 @@ get_subarray_broadcast_transfer_function(int aligned, npy_intp src_size, npy_intp dst_size, PyArray_Dims src_shape, PyArray_Dims dst_shape, int move_references, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { _subarray_broadcast_data *data; @@ -1488,7 +1488,7 @@ get_subarray_transfer_function(int aligned, npy_intp src_stride, npy_intp dst_stride, PyArray_Descr *src_dtype, PyArray_Descr *dst_dtype, int move_references, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { PyArray_Dims src_shape = {NULL, -1}, dst_shape = {NULL, -1}; @@ -1580,7 +1580,7 @@ get_subarray_transfer_function(int aligned, /**************************** COPY FIELDS *******************************/ typedef struct { npy_intp src_offset, dst_offset, src_itemsize; - PyArray_StridedTransferFn stransfer; + PyArray_StridedTransferFn *stransfer; void *data; } _single_field_transfer; @@ -1688,7 +1688,7 @@ get_fields_transfer_function(int aligned, npy_intp src_stride, npy_intp dst_stride, PyArray_Descr *src_dtype, PyArray_Descr *dst_dtype, int move_references, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { PyObject *names, *key, *tup, *title; @@ -2011,7 +2011,7 @@ static int get_decsrcref_fields_transfer_function(int aligned, npy_intp src_stride, PyArray_Descr *src_dtype, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { PyObject *names, *key, *tup, *title; @@ -2077,7 +2077,7 @@ static int get_setdestzero_fields_transfer_function(int aligned, npy_intp dst_stride, PyArray_Descr *dst_dtype, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { PyObject *names, *key, *tup, *title; @@ -2217,7 +2217,7 @@ NPY_NO_EXPORT int get_setdstzero_transfer_function(int aligned, npy_intp dst_stride, PyArray_Descr *dst_dtype, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { _dst_memset_zero_data *data; @@ -2256,7 +2256,7 @@ get_setdstzero_transfer_function(int aligned, else if (dst_dtype->subarray != NULL) { PyArray_Dims dst_shape = {NULL, -1}; npy_intp dst_size = 1; - PyArray_StridedTransferFn stransfer; + PyArray_StridedTransferFn *stransfer; void *data; if (!(PyArray_IntpConverter(dst_dtype->subarray->shape, @@ -2332,7 +2332,7 @@ NPY_NO_EXPORT int get_decsrcref_transfer_function(int aligned, npy_intp src_stride, PyArray_Descr *src_dtype, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { /* If there are no references, it's a nop */ @@ -2353,7 +2353,7 @@ get_decsrcref_transfer_function(int aligned, else if (src_dtype->subarray != NULL) { PyArray_Dims src_shape = {NULL, -1}; npy_intp src_size = 1; - PyArray_StridedTransferFn stransfer; + PyArray_StridedTransferFn *stransfer; void *data; if (!(PyArray_IntpConverter(src_dtype->subarray->shape, @@ -2400,7 +2400,7 @@ PyArray_GetDTypeTransferFunction(int aligned, npy_intp src_stride, npy_intp dst_stride, PyArray_Descr *src_dtype, PyArray_Descr *dst_dtype, int move_references, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata) { npy_intp src_itemsize, dst_itemsize; @@ -2435,6 +2435,29 @@ PyArray_GetDTypeTransferFunction(int aligned, src_type_num = src_dtype->type_num; dst_type_num = dst_dtype->type_num; + /* + * If there are no references and the data types are equivalent, + * return a simple copy + */ + if (!PyDataType_REFCHK(src_dtype) && !PyDataType_REFCHK(dst_dtype) && + PyArray_EquivTypes(src_dtype, dst_dtype)) { + /* + * We can't pass through the aligned flag because it's not + * appropriate. Consider a size-8 string, it will say it's + * aligned because strings only need alignment 1, but the + * copy function wants to know if it's alignment 8. + * + * TODO: Change align from a flag to a "best power of 2 alignment" + * which holds the strongest alignment value for all + * the data which will be used. + */ + *outstransfer = PyArray_GetStridedCopyFn(0, + src_stride, dst_stride, + src_dtype->elsize); + *outtransferdata = NULL; + return NPY_SUCCEED; + } + /* First look at the possibilities of just a copy or swap */ if (src_itemsize == dst_itemsize && src_dtype->kind == dst_dtype->kind && !PyDataType_HASFIELDS(src_dtype) && diff --git a/numpy/core/src/multiarray/lowlevel_strided_loops.c.src b/numpy/core/src/multiarray/lowlevel_strided_loops.c.src index c0b35df4b..c910e2992 100644 --- a/numpy/core/src/multiarray/lowlevel_strided_loops.c.src +++ b/numpy/core/src/multiarray/lowlevel_strided_loops.c.src @@ -328,7 +328,7 @@ _contig_to_contig(char *dst, npy_intp NPY_UNUSED(dst_stride), } -NPY_NO_EXPORT PyArray_StridedTransferFn +NPY_NO_EXPORT PyArray_StridedTransferFn * PyArray_GetStridedCopyFn(npy_intp aligned, npy_intp src_stride, npy_intp dst_stride, npy_intp itemsize) { @@ -483,7 +483,7 @@ PyArray_GetStridedCopyFn(npy_intp aligned, npy_intp src_stride, * #not_pair = 1, 0# */ -NPY_NO_EXPORT PyArray_StridedTransferFn +NPY_NO_EXPORT PyArray_StridedTransferFn * @function@(npy_intp aligned, npy_intp src_stride, npy_intp dst_stride, npy_intp itemsize) { @@ -688,7 +688,7 @@ PyArray_TransferNDimToStrided(npy_intp ndim, npy_intp *coords, npy_intp coords_inc, npy_intp *shape, npy_intp shape_inc, npy_intp count, npy_intp src_itemsize, - PyArray_StridedTransferFn stransfer, + PyArray_StridedTransferFn *stransfer, void *data) { npy_intp i, M, N, coord0, shape0, src_stride0, coord1, shape1, src_stride1; @@ -806,7 +806,7 @@ PyArray_TransferStridedToNDim(npy_intp ndim, npy_intp *coords, npy_intp coords_inc, npy_intp *shape, npy_intp shape_inc, npy_intp count, npy_intp src_itemsize, - PyArray_StridedTransferFn stransfer, + PyArray_StridedTransferFn *stransfer, void *data) { npy_intp i, M, N, coord0, shape0, dst_stride0, coord1, shape1, dst_stride1; diff --git a/numpy/core/src/multiarray/lowlevel_strided_loops.h b/numpy/core/src/multiarray/lowlevel_strided_loops.h index 89fcd72d6..5ae6d2868 100644 --- a/numpy/core/src/multiarray/lowlevel_strided_loops.h +++ b/numpy/core/src/multiarray/lowlevel_strided_loops.h @@ -23,7 +23,7 @@ * PyArray_CopyStridedTransferData should be used to copy it. * */ -typedef void (*PyArray_StridedTransferFn)(char *dst, npy_intp dst_stride, +typedef void (PyArray_StridedTransferFn)(char *dst, npy_intp dst_stride, char *src, npy_intp src_stride, npy_intp N, npy_intp src_itemsize, void *transferdata); @@ -59,7 +59,7 @@ PyArray_CopyStridedTransferData(void *transferdata); * Should be the item size if it will always be the same, 0 otherwise. * */ -NPY_NO_EXPORT PyArray_StridedTransferFn +NPY_NO_EXPORT PyArray_StridedTransferFn * PyArray_GetStridedCopyFn(npy_intp aligned, npy_intp src_stride, npy_intp dst_stride, npy_intp itemsize); @@ -73,7 +73,7 @@ PyArray_GetStridedCopyFn(npy_intp aligned, npy_intp src_stride, * * Parameters are as for PyArray_GetStridedCopyFn. */ -NPY_NO_EXPORT PyArray_StridedTransferFn +NPY_NO_EXPORT PyArray_StridedTransferFn * PyArray_GetStridedCopySwapFn(npy_intp aligned, npy_intp src_stride, npy_intp dst_stride, npy_intp itemsize); @@ -87,7 +87,7 @@ PyArray_GetStridedCopySwapFn(npy_intp aligned, npy_intp src_stride, * * Parameters are as for PyArray_GetStridedCopyFn. */ -NPY_NO_EXPORT PyArray_StridedTransferFn +NPY_NO_EXPORT PyArray_StridedTransferFn * PyArray_GetStridedCopySwapPairFn(npy_intp aligned, npy_intp src_stride, npy_intp dst_stride, npy_intp itemsize); @@ -105,7 +105,7 @@ NPY_NO_EXPORT int PyArray_GetStridedZeroPadCopyFn(int aligned, npy_intp src_stride, npy_intp dst_stride, npy_intp src_itemsize, npy_intp dst_itemsize, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata); /* @@ -141,7 +141,7 @@ PyArray_GetDTypeTransferFunction(int aligned, npy_intp src_stride, npy_intp dst_stride, PyArray_Descr *src_dtype, PyArray_Descr *dst_dtype, int move_references, - PyArray_StridedTransferFn *outstransfer, + PyArray_StridedTransferFn **outstransfer, void **outtransferdata); /* @@ -194,7 +194,7 @@ PyArray_TransferNDimToStrided(npy_intp ndim, npy_intp *coords, npy_intp coords_inc, npy_intp *shape, npy_intp shape_inc, npy_intp count, npy_intp src_itemsize, - PyArray_StridedTransferFn stransfer, + PyArray_StridedTransferFn *stransfer, void *transferdata); NPY_NO_EXPORT npy_intp @@ -204,7 +204,7 @@ PyArray_TransferStridedToNDim(npy_intp ndim, npy_intp *coords, npy_intp coords_inc, npy_intp *shape, npy_intp shape_inc, npy_intp count, npy_intp src_itemsize, - PyArray_StridedTransferFn stransfer, + PyArray_StridedTransferFn *stransfer, void *transferdata); #endif diff --git a/numpy/core/src/multiarray/new_iterator.c.src b/numpy/core/src/multiarray/new_iterator.c.src index 4536f9c3f..f86ee4c67 100644 --- a/numpy/core/src/multiarray/new_iterator.c.src +++ b/numpy/core/src/multiarray/new_iterator.c.src @@ -167,11 +167,11 @@ struct NpyIter_BD { &(bufferdata)->bd_flexdata + 0) #define NBF_PTRS(bufferdata) ((char **) \ (&(bufferdata)->bd_flexdata + 1*(niter))) -#define NBF_READTRANSFERFN(bufferdata) ((PyArray_StridedTransferFn *) \ +#define NBF_READTRANSFERFN(bufferdata) ((PyArray_StridedTransferFn **) \ (&(bufferdata)->bd_flexdata + 2*(niter))) #define NBF_READTRANSFERDATA(bufferdata) ((void **) \ (&(bufferdata)->bd_flexdata + 3*(niter))) -#define NBF_WRITETRANSFERFN(bufferdata) ((PyArray_StridedTransferFn *) \ +#define NBF_WRITETRANSFERFN(bufferdata) ((PyArray_StridedTransferFn **) \ (&(bufferdata)->bd_flexdata + 4*(niter))) #define NBF_WRITETRANSFERDATA(bufferdata) ((void **) \ (&(bufferdata)->bd_flexdata + 5*(niter))) @@ -4206,12 +4206,12 @@ npyiter_allocate_transfer_functions(NpyIter *iter) PyArrayObject **op = NIT_OBJECTS(iter); PyArray_Descr **op_dtype = NIT_DTYPES(iter); npy_intp *strides = NAD_STRIDES(axisdata), op_stride; - PyArray_StridedTransferFn *readtransferfn = NBF_READTRANSFERFN(bufferdata), - *writetransferfn = NBF_WRITETRANSFERFN(bufferdata); + PyArray_StridedTransferFn **readtransferfn = NBF_READTRANSFERFN(bufferdata), + **writetransferfn = NBF_WRITETRANSFERFN(bufferdata); void **readtransferdata = NBF_READTRANSFERDATA(bufferdata), **writetransferdata = NBF_WRITETRANSFERDATA(bufferdata); - PyArray_StridedTransferFn stransfer = NULL; + PyArray_StridedTransferFn *stransfer = NULL; void *transferdata = NULL; for (iiter = 0; iiter < niter; ++iiter) { @@ -4466,7 +4466,7 @@ npyiter_copy_from_buffers(NpyIter *iter) char **buffers = NBF_BUFFERS(bufferdata); char *buffer; - PyArray_StridedTransferFn stransfer = NULL; + PyArray_StridedTransferFn *stransfer = NULL; void *transferdata = NULL; npy_intp axisdata_incr = NIT_AXISDATA_SIZEOF(itflags, ndim, niter) / @@ -4548,7 +4548,7 @@ npyiter_copy_to_buffers(NpyIter *iter) npy_intp iterindex, iterend, transfersize, singlestridesize; int is_onestride = 0, any_buffered = 0; - PyArray_StridedTransferFn stransfer = NULL; + PyArray_StridedTransferFn *stransfer = NULL; void *transferdata = NULL; npy_intp axisdata_incr = NIT_AXISDATA_SIZEOF(itflags, ndim, niter) / |