Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Doc/c-api/buffer.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 1 addition & 2 deletions Doc/c-api/memoryview.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.

6 changes: 3 additions & 3 deletions Include/cpython/abstract.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion Include/memoryobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -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 *``.
7 changes: 4 additions & 3 deletions Objects/abstract.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -564,12 +564,13 @@ PyBuffer_SizeFromFormat(const char *format)
}

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;
Expand Down
18 changes: 9 additions & 9 deletions Objects/memoryobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 */

Expand All @@ -2297,15 +2297,15 @@ 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);
}

/* 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);
Expand Down