-
-
Notifications
You must be signed in to change notification settings - Fork 32.7k
Open
Labels
easyinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-C-APItype-refactorCode refactoring (with no changes in behavior)Code refactoring (with no changes in behavior)
Description
The declaration of the PyBuffer_FromContiguous
uses order
as the name of its last parameter, which is fine for C and Fortran styles, but in its definition, it uses fort
as the name of the parameter!.
I think we should rename fort
to order
and reflect that on the function documentation. Also, we should replace fort
in the function comment.
Lines 61 to 76 in 797c2c3
PyAPI_FUNC(int) PyBuffer_FromContiguous(const Py_buffer *view, const void *buf, | |
Py_ssize_t len, char order); | |
/* Copy len bytes of data from the contiguous chunk of memory | |
pointed to by buf into the buffer exported by obj. Return | |
0 on success and return -1 and raise a PyBuffer_Error on | |
error (i.e. the object does not have a buffer interface or | |
it is not working). | |
If fort is 'F', then if the object is multi-dimensional, | |
then the data will be copied into the array in | |
Fortran-style (first dimension varies the fastest). If | |
fort is 'C', then the data will be copied into the array | |
in C-style (last dimension varies the fastest). If fort | |
is 'A', then it does not matter and the copy will be made | |
in whatever way is more efficient. */ |
Lines 617 to 667 in 797c2c3
PyBuffer_FromContiguous(const Py_buffer *view, const void *buf, Py_ssize_t len, char fort) | |
{ | |
int k; | |
void (*addone)(int, Py_ssize_t *, const Py_ssize_t *); | |
Py_ssize_t *indices, elements; | |
char *ptr; | |
const char *src; | |
if (len > view->len) { | |
len = view->len; | |
} | |
if (PyBuffer_IsContiguous(view, fort)) { | |
/* simplest copy is all that is needed */ | |
memcpy(view->buf, buf, len); | |
return 0; | |
} | |
/* Otherwise a more elaborate scheme is needed */ | |
/* view->ndim <= 64 */ | |
indices = (Py_ssize_t *)PyMem_Malloc(sizeof(Py_ssize_t)*(view->ndim)); | |
if (indices == NULL) { | |
PyErr_NoMemory(); | |
return -1; | |
} | |
for (k=0; k<view->ndim;k++) { | |
indices[k] = 0; | |
} | |
if (fort == 'F') { | |
addone = _Py_add_one_to_index_F; | |
} | |
else { | |
addone = _Py_add_one_to_index_C; | |
} | |
src = buf; | |
/* XXX : This is not going to be the fastest code in the world | |
several optimizations are possible. | |
*/ | |
elements = len / view->itemsize; | |
while (elements--) { | |
ptr = PyBuffer_GetPointer(view, indices); | |
memcpy(ptr, src, view->itemsize); | |
src += view->itemsize; | |
addone(view->ndim, indices, view->shape); | |
} | |
PyMem_Free(indices); | |
return 0; | |
} |
Linked PRs
Metadata
Metadata
Assignees
Labels
easyinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-C-APItype-refactorCode refactoring (with no changes in behavior)Code refactoring (with no changes in behavior)
Projects
Status
Todo