mirror of https://github.com/python/cpython
bpo-46140: take more Py_buffer arguments as const * (GH-30217)
This commit is contained in:
parent
fc54e722a2
commit
31ff96712e
|
@ -470,27 +470,27 @@ Buffer-related functions
|
||||||
.. versionadded:: 3.9
|
.. versionadded:: 3.9
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: int PyBuffer_IsContiguous(Py_buffer *view, char order)
|
.. c:function:: int PyBuffer_IsContiguous(const Py_buffer *view, char order)
|
||||||
|
|
||||||
Return ``1`` if the memory defined by the *view* is C-style (*order* is
|
Return ``1`` if the memory defined by the *view* is C-style (*order* is
|
||||||
``'C'``) or Fortran-style (*order* is ``'F'``) :term:`contiguous` or either one
|
``'C'``) or Fortran-style (*order* is ``'F'``) :term:`contiguous` or either one
|
||||||
(*order* is ``'A'``). Return ``0`` otherwise. This function always succeeds.
|
(*order* is ``'A'``). Return ``0`` otherwise. This function always succeeds.
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: void* PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices)
|
.. c:function:: void* PyBuffer_GetPointer(const Py_buffer *view, const Py_ssize_t *indices)
|
||||||
|
|
||||||
Get the memory area pointed to by the *indices* inside the given *view*.
|
Get the memory area pointed to by the *indices* inside the given *view*.
|
||||||
*indices* must point to an array of ``view->ndim`` indices.
|
*indices* must point to an array of ``view->ndim`` indices.
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: int PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char fort)
|
.. c:function:: int PyBuffer_FromContiguous(const Py_buffer *view, const void *buf, Py_ssize_t len, char fort)
|
||||||
|
|
||||||
Copy contiguous *len* bytes from *buf* to *view*.
|
Copy contiguous *len* bytes from *buf* to *view*.
|
||||||
*fort* can be ``'C'`` or ``'F'`` (for C-style or Fortran-style ordering).
|
*fort* can be ``'C'`` or ``'F'`` (for C-style or Fortran-style ordering).
|
||||||
``0`` is returned on success, ``-1`` on error.
|
``0`` is returned on success, ``-1`` on error.
|
||||||
|
|
||||||
|
|
||||||
.. c:function:: int PyBuffer_ToContiguous(void *buf, Py_buffer *src, Py_ssize_t len, char order)
|
.. c:function:: int PyBuffer_ToContiguous(void *buf, const Py_buffer *src, Py_ssize_t len, char order)
|
||||||
|
|
||||||
Copy *len* bytes from *src* to its contiguous representation in *buf*.
|
Copy *len* bytes from *src* to its contiguous representation in *buf*.
|
||||||
*order* can be ``'C'`` or ``'F'`` or ``'A'`` (for C-style or Fortran-style
|
*order* can be ``'C'`` or ``'F'`` or ``'A'`` (for C-style or Fortran-style
|
||||||
|
|
|
@ -27,7 +27,7 @@ any other object.
|
||||||
|
|
||||||
.. versionadded:: 3.3
|
.. versionadded:: 3.3
|
||||||
|
|
||||||
.. c:function:: PyObject *PyMemoryView_FromBuffer(Py_buffer *view)
|
.. c:function:: PyObject *PyMemoryView_FromBuffer(const Py_buffer *view)
|
||||||
|
|
||||||
Create a memoryview object wrapping the given buffer structure *view*.
|
Create a memoryview object wrapping the given buffer structure *view*.
|
||||||
For simple byte buffers, :c:func:`PyMemoryView_FromMemory` is the preferred
|
For simple byte buffers, :c:func:`PyMemoryView_FromMemory` is the preferred
|
||||||
|
@ -61,4 +61,3 @@ any other object.
|
||||||
on or ``NULL`` if the memoryview has been created by one of the functions
|
on or ``NULL`` if the memoryview has been created by one of the functions
|
||||||
:c:func:`PyMemoryView_FromMemory` or :c:func:`PyMemoryView_FromBuffer`.
|
:c:func:`PyMemoryView_FromMemory` or :c:func:`PyMemoryView_FromBuffer`.
|
||||||
*mview* **must** be a memoryview instance.
|
*mview* **must** be a memoryview instance.
|
||||||
|
|
||||||
|
|
|
@ -183,17 +183,17 @@ PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view,
|
||||||
|
|
||||||
/* Get the memory area pointed to by the indices for the buffer given.
|
/* Get the memory area pointed to by the indices for the buffer given.
|
||||||
Note that view->ndim is the assumed size of indices. */
|
Note that view->ndim is the assumed size of indices. */
|
||||||
PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices);
|
PyAPI_FUNC(void *) PyBuffer_GetPointer(const Py_buffer *view, const Py_ssize_t *indices);
|
||||||
|
|
||||||
/* Return the implied itemsize of the data-format area from a
|
/* Return the implied itemsize of the data-format area from a
|
||||||
struct-style description. */
|
struct-style description. */
|
||||||
PyAPI_FUNC(Py_ssize_t) PyBuffer_SizeFromFormat(const char *format);
|
PyAPI_FUNC(Py_ssize_t) PyBuffer_SizeFromFormat(const char *format);
|
||||||
|
|
||||||
/* Implementation in memoryobject.c */
|
/* Implementation in memoryobject.c */
|
||||||
PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view,
|
PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, const Py_buffer *view,
|
||||||
Py_ssize_t len, char order);
|
Py_ssize_t len, char order);
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer *view, void *buf,
|
PyAPI_FUNC(int) PyBuffer_FromContiguous(const Py_buffer *view, const void *buf,
|
||||||
Py_ssize_t len, char order);
|
Py_ssize_t len, char order);
|
||||||
|
|
||||||
/* Copy len bytes of data from the contiguous chunk of memory
|
/* Copy len bytes of data from the contiguous chunk of memory
|
||||||
|
|
|
@ -26,7 +26,7 @@ PyAPI_FUNC(PyObject *) PyMemoryView_FromMemory(char *mem, Py_ssize_t size,
|
||||||
int flags);
|
int flags);
|
||||||
#endif
|
#endif
|
||||||
#ifndef Py_LIMITED_API
|
#ifndef Py_LIMITED_API
|
||||||
PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info);
|
PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(const Py_buffer *info);
|
||||||
#endif
|
#endif
|
||||||
PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
|
PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
|
||||||
int buffertype,
|
int buffertype,
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
:c:func:`PyBuffer_GetPointer`, :c:func:`PyBuffer_FromContiguous`, :c:func:`PyBuffer_ToContiguous` and :c:func:`PyMemoryView_FromBuffer` now take buffer info by ``const Py_buffer *`` instead of ``Py_buffer *``, as they do not need mutability. :c:func:`PyBuffer_FromContiguous` also now takes the source buffer as ``const void *``, and similarly :c:func:`PyBuffer_GetPointer` takes the strides as ``const Py_ssize_t *``.
|
|
@ -474,7 +474,7 @@ PyBuffer_IsContiguous(const Py_buffer *view, char order)
|
||||||
|
|
||||||
|
|
||||||
void*
|
void*
|
||||||
PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices)
|
PyBuffer_GetPointer(const Py_buffer *view, const Py_ssize_t *indices)
|
||||||
{
|
{
|
||||||
char* pointer;
|
char* pointer;
|
||||||
int i;
|
int i;
|
||||||
|
@ -564,12 +564,13 @@ done:
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char fort)
|
PyBuffer_FromContiguous(const Py_buffer *view, const void *buf, Py_ssize_t len, char fort)
|
||||||
{
|
{
|
||||||
int k;
|
int k;
|
||||||
void (*addone)(int, Py_ssize_t *, const Py_ssize_t *);
|
void (*addone)(int, Py_ssize_t *, const Py_ssize_t *);
|
||||||
Py_ssize_t *indices, elements;
|
Py_ssize_t *indices, elements;
|
||||||
char *src, *ptr;
|
char *ptr;
|
||||||
|
const char *src;
|
||||||
|
|
||||||
if (len > view->len) {
|
if (len > view->len) {
|
||||||
len = view->len;
|
len = view->len;
|
||||||
|
|
|
@ -389,7 +389,7 @@ copy_rec(const Py_ssize_t *shape, Py_ssize_t ndim, Py_ssize_t itemsize,
|
||||||
|
|
||||||
/* Faster copying of one-dimensional arrays. */
|
/* Faster copying of one-dimensional arrays. */
|
||||||
static int
|
static int
|
||||||
copy_single(Py_buffer *dest, Py_buffer *src)
|
copy_single(const Py_buffer *dest, const Py_buffer *src)
|
||||||
{
|
{
|
||||||
char *mem = NULL;
|
char *mem = NULL;
|
||||||
|
|
||||||
|
@ -421,7 +421,7 @@ copy_single(Py_buffer *dest, Py_buffer *src)
|
||||||
structure. Copying is atomic, the function never fails with a partial
|
structure. Copying is atomic, the function never fails with a partial
|
||||||
copy. */
|
copy. */
|
||||||
static int
|
static int
|
||||||
copy_buffer(Py_buffer *dest, Py_buffer *src)
|
copy_buffer(const Py_buffer *dest, const Py_buffer *src)
|
||||||
{
|
{
|
||||||
char *mem = NULL;
|
char *mem = NULL;
|
||||||
|
|
||||||
|
@ -479,7 +479,7 @@ init_fortran_strides_from_shape(Py_buffer *view)
|
||||||
or 'A' (Any). Assumptions: src has PyBUF_FULL information, src->ndim >= 1,
|
or 'A' (Any). Assumptions: src has PyBUF_FULL information, src->ndim >= 1,
|
||||||
len(mem) == src->len. */
|
len(mem) == src->len. */
|
||||||
static int
|
static int
|
||||||
buffer_to_contiguous(char *mem, Py_buffer *src, char order)
|
buffer_to_contiguous(char *mem, const Py_buffer *src, char order)
|
||||||
{
|
{
|
||||||
Py_buffer dest;
|
Py_buffer dest;
|
||||||
Py_ssize_t *strides;
|
Py_ssize_t *strides;
|
||||||
|
@ -755,7 +755,7 @@ PyMemoryView_FromMemory(char *mem, Py_ssize_t size, int flags)
|
||||||
without full information. Because of this fact init_shape_strides()
|
without full information. Because of this fact init_shape_strides()
|
||||||
must be able to reconstruct missing values. */
|
must be able to reconstruct missing values. */
|
||||||
PyObject *
|
PyObject *
|
||||||
PyMemoryView_FromBuffer(Py_buffer *info)
|
PyMemoryView_FromBuffer(const Py_buffer *info)
|
||||||
{
|
{
|
||||||
_PyManagedBufferObject *mbuf;
|
_PyManagedBufferObject *mbuf;
|
||||||
PyObject *mv;
|
PyObject *mv;
|
||||||
|
@ -840,7 +840,7 @@ mbuf_copy_format(_PyManagedBufferObject *mbuf, const char *fmt)
|
||||||
passes the altered format pointer to PyBuffer_Release().
|
passes the altered format pointer to PyBuffer_Release().
|
||||||
*/
|
*/
|
||||||
static PyObject *
|
static PyObject *
|
||||||
memory_from_contiguous_copy(Py_buffer *src, char order)
|
memory_from_contiguous_copy(const Py_buffer *src, char order)
|
||||||
{
|
{
|
||||||
_PyManagedBufferObject *mbuf;
|
_PyManagedBufferObject *mbuf;
|
||||||
PyMemoryViewObject *mv;
|
PyMemoryViewObject *mv;
|
||||||
|
@ -982,7 +982,7 @@ typedef struct {
|
||||||
} Py_buffer_full;
|
} Py_buffer_full;
|
||||||
|
|
||||||
int
|
int
|
||||||
PyBuffer_ToContiguous(void *buf, Py_buffer *src, Py_ssize_t len, char order)
|
PyBuffer_ToContiguous(void *buf, const Py_buffer *src, Py_ssize_t len, char order)
|
||||||
{
|
{
|
||||||
Py_buffer_full *fb = NULL;
|
Py_buffer_full *fb = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -2271,7 +2271,7 @@ memory_repr(PyMemoryViewObject *self)
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
lookup_dimension(Py_buffer *view, char *ptr, int dim, Py_ssize_t index)
|
lookup_dimension(const Py_buffer *view, char *ptr, int dim, Py_ssize_t index)
|
||||||
{
|
{
|
||||||
Py_ssize_t nitems; /* items in the given dimension */
|
Py_ssize_t nitems; /* items in the given dimension */
|
||||||
|
|
||||||
|
@ -2297,7 +2297,7 @@ lookup_dimension(Py_buffer *view, char *ptr, int dim, Py_ssize_t index)
|
||||||
|
|
||||||
/* Get the pointer to the item at index. */
|
/* Get the pointer to the item at index. */
|
||||||
static char *
|
static char *
|
||||||
ptr_from_index(Py_buffer *view, Py_ssize_t index)
|
ptr_from_index(const Py_buffer *view, Py_ssize_t index)
|
||||||
{
|
{
|
||||||
char *ptr = (char *)view->buf;
|
char *ptr = (char *)view->buf;
|
||||||
return lookup_dimension(view, ptr, 0, index);
|
return lookup_dimension(view, ptr, 0, index);
|
||||||
|
@ -2305,7 +2305,7 @@ ptr_from_index(Py_buffer *view, Py_ssize_t index)
|
||||||
|
|
||||||
/* Get the pointer to the item at tuple. */
|
/* Get the pointer to the item at tuple. */
|
||||||
static char *
|
static char *
|
||||||
ptr_from_tuple(Py_buffer *view, PyObject *tup)
|
ptr_from_tuple(const Py_buffer *view, PyObject *tup)
|
||||||
{
|
{
|
||||||
char *ptr = (char *)view->buf;
|
char *ptr = (char *)view->buf;
|
||||||
Py_ssize_t dim, nindices = PyTuple_GET_SIZE(tup);
|
Py_ssize_t dim, nindices = PyTuple_GET_SIZE(tup);
|
||||||
|
|
Loading…
Reference in New Issue