Skip to content

Consistently use order naming for PyBuffer_* functions#137696

@nybblista

Description

@nybblista

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.

PyAPI_FUNC(int) PyBuffer_FromContiguous(constPy_buffer*view, constvoid*buf,
Py_ssize_tlen, charorder);
/* 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. */

PyBuffer_FromContiguous(constPy_buffer*view, constvoid*buf, Py_ssize_tlen, charfort)
{
intk;
void (*addone)(int, Py_ssize_t*, constPy_ssize_t*);
Py_ssize_t*indices, elements;
char*ptr;
constchar*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);
return0;
}
/* 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);
return0;
}

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    easyinterpreter-core(Objects, Python, Grammar, and Parser dirs)topic-C-APItype-refactorCode refactoring (with no changes in behavior)

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions