-
-
Notifications
You must be signed in to change notification settings - Fork 33.6k
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