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
|
||||
|
||||
|
||||
.. 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
|
||||
``'C'``) or Fortran-style (*order* is ``'F'``) :term:`contiguous` or either one
|
||||
(*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*.
|
||||
*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*.
|
||||
*fort* can be ``'C'`` or ``'F'`` (for C-style or Fortran-style ordering).
|
||||
``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*.
|
||||
*order* can be ``'C'`` or ``'F'`` or ``'A'`` (for C-style or Fortran-style
|
||||
|
|
|
@ -27,7 +27,7 @@ any other object.
|
|||
|
||||
.. 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*.
|
||||
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
|
||||
:c:func:`PyMemoryView_FromMemory` or :c:func:`PyMemoryView_FromBuffer`.
|
||||
*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.
|
||||
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
|
||||
struct-style description. */
|
||||
PyAPI_FUNC(Py_ssize_t) PyBuffer_SizeFromFormat(const char *format);
|
||||
|
||||
/* 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);
|
||||
|
||||
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);
|
||||
|
||||
/* 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);
|
||||
#endif
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info);
|
||||
PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(const Py_buffer *info);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
|
||||
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*
|
||||
PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices)
|
||||
PyBuffer_GetPointer(const Py_buffer *view, const Py_ssize_t *indices)
|
||||
{
|
||||
char* pointer;
|
||||
int i;
|
||||
|
@ -564,12 +564,13 @@ done:
|
|||
}
|
||||
|
||||
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;
|
||||
void (*addone)(int, Py_ssize_t *, const Py_ssize_t *);
|
||||
Py_ssize_t *indices, elements;
|
||||
char *src, *ptr;
|
||||
char *ptr;
|
||||
const char *src;
|
||||
|
||||
if (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. */
|
||||
static int
|
||||
copy_single(Py_buffer *dest, Py_buffer *src)
|
||||
copy_single(const Py_buffer *dest, const Py_buffer *src)
|
||||
{
|
||||
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
|
||||
copy. */
|
||||
static int
|
||||
copy_buffer(Py_buffer *dest, Py_buffer *src)
|
||||
copy_buffer(const Py_buffer *dest, const Py_buffer *src)
|
||||
{
|
||||
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,
|
||||
len(mem) == src->len. */
|
||||
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_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()
|
||||
must be able to reconstruct missing values. */
|
||||
PyObject *
|
||||
PyMemoryView_FromBuffer(Py_buffer *info)
|
||||
PyMemoryView_FromBuffer(const Py_buffer *info)
|
||||
{
|
||||
_PyManagedBufferObject *mbuf;
|
||||
PyObject *mv;
|
||||
|
@ -840,7 +840,7 @@ mbuf_copy_format(_PyManagedBufferObject *mbuf, const char *fmt)
|
|||
passes the altered format pointer to PyBuffer_Release().
|
||||
*/
|
||||
static PyObject *
|
||||
memory_from_contiguous_copy(Py_buffer *src, char order)
|
||||
memory_from_contiguous_copy(const Py_buffer *src, char order)
|
||||
{
|
||||
_PyManagedBufferObject *mbuf;
|
||||
PyMemoryViewObject *mv;
|
||||
|
@ -982,7 +982,7 @@ typedef struct {
|
|||
} Py_buffer_full;
|
||||
|
||||
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;
|
||||
int ret;
|
||||
|
@ -2271,7 +2271,7 @@ memory_repr(PyMemoryViewObject *self)
|
|||
/**************************************************************************/
|
||||
|
||||
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 */
|
||||
|
||||
|
@ -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. */
|
||||
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;
|
||||
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. */
|
||||
static char *
|
||||
ptr_from_tuple(Py_buffer *view, PyObject *tup)
|
||||
ptr_from_tuple(const Py_buffer *view, PyObject *tup)
|
||||
{
|
||||
char *ptr = (char *)view->buf;
|
||||
Py_ssize_t dim, nindices = PyTuple_GET_SIZE(tup);
|
||||
|
|
Loading…
Reference in New Issue