blob: 0b521df50ff490aef1eeec1bc54e5b23590a14a9 [file] [log] [blame]
Georg Brandl54a3faa2008-01-20 09:30:57 +00001.. highlightlang:: c
2
Chris Jerdonek5fae0e52012-11-20 17:45:51 -08003.. index::
4 single: buffer protocol
5 single: buffer interface; (see buffer protocol)
6 single: buffer object; (see buffer protocol)
7
Georg Brandl54a3faa2008-01-20 09:30:57 +00008.. _bufferobjects:
9
Antoine Pitrouf7ba2fa2010-09-28 23:39:41 +000010Buffer Protocol
11---------------
Georg Brandl54a3faa2008-01-20 09:30:57 +000012
13.. sectionauthor:: Greg Stein <gstein@lyra.org>
Benjamin Peterson9d0ced32008-09-16 02:24:31 +000014.. sectionauthor:: Benjamin Peterson
Stefan Krah9a2d99e2012-02-25 12:24:21 +010015.. sectionauthor:: Stefan Krah
Georg Brandl54a3faa2008-01-20 09:30:57 +000016
17
Antoine Pitrou8abc9352010-12-12 19:59:47 +000018Certain objects available in Python wrap access to an underlying memory
19array or *buffer*. Such objects include the built-in :class:`bytes` and
20:class:`bytearray`, and some extension types like :class:`array.array`.
21Third-party libraries may define their own types for special purposes, such
22as image processing or numeric analysis.
Georg Brandl54a3faa2008-01-20 09:30:57 +000023
Antoine Pitrou8abc9352010-12-12 19:59:47 +000024While each of these types have their own semantics, they share the common
25characteristic of being backed by a possibly large memory buffer. It is
Stefan Krah9a2d99e2012-02-25 12:24:21 +010026then desirable, in some situations, to access that buffer directly and
Antoine Pitrou8abc9352010-12-12 19:59:47 +000027without intermediate copying.
28
Chris Jerdonek5fae0e52012-11-20 17:45:51 -080029Python provides such a facility at the C level in the form of the :ref:`buffer
30protocol <bufferobjects>`. This protocol has two sides:
Antoine Pitrou8abc9352010-12-12 19:59:47 +000031
32.. index:: single: PyBufferProcs
33
34- on the producer side, a type can export a "buffer interface" which allows
35 objects of that type to expose information about their underlying buffer.
36 This interface is described in the section :ref:`buffer-structs`;
37
38- on the consumer side, several means are available to obtain a pointer to
39 the raw underlying data of an object (for example a method parameter).
40
41Simple objects such as :class:`bytes` and :class:`bytearray` expose their
42underlying buffer in byte-oriented form. Other forms are possible; for example,
43the elements exposed by a :class:`array.array` can be multi-byte values.
Georg Brandl54a3faa2008-01-20 09:30:57 +000044
Antoine Pitrou99a00a42010-09-28 23:04:04 +000045An example consumer of the buffer interface is the :meth:`~io.BufferedIOBase.write`
46method of file objects: any object that can export a series of bytes through
47the buffer interface can be written to a file. While :meth:`write` only
48needs read-only access to the internal contents of the object passed to it,
49other methods such as :meth:`~io.BufferedIOBase.readinto` need write access
50to the contents of their argument. The buffer interface allows objects to
51selectively allow or reject exporting of read-write and read-only buffers.
52
53There are two ways for a consumer of the buffer interface to acquire a buffer
54over a target object:
55
Georg Brandl60203b42010-10-06 10:11:56 +000056* call :c:func:`PyObject_GetBuffer` with the right parameters;
Antoine Pitrou99a00a42010-09-28 23:04:04 +000057
Georg Brandl60203b42010-10-06 10:11:56 +000058* call :c:func:`PyArg_ParseTuple` (or one of its siblings) with one of the
Antoine Pitrou99a00a42010-09-28 23:04:04 +000059 ``y*``, ``w*`` or ``s*`` :ref:`format codes <arg-parsing>`.
60
Georg Brandl60203b42010-10-06 10:11:56 +000061In both cases, :c:func:`PyBuffer_Release` must be called when the buffer
Antoine Pitrou99a00a42010-09-28 23:04:04 +000062isn't needed anymore. Failure to do so could lead to various issues such as
63resource leaks.
64
Georg Brandl54a3faa2008-01-20 09:30:57 +000065
Stefan Krah9a2d99e2012-02-25 12:24:21 +010066.. _buffer-structure:
67
68Buffer structure
69================
Antoine Pitrou99a00a42010-09-28 23:04:04 +000070
Antoine Pitrouf7ba2fa2010-09-28 23:39:41 +000071Buffer structures (or simply "buffers") are useful as a way to expose the
72binary data from another object to the Python programmer. They can also be
73used as a zero-copy slicing mechanism. Using their ability to reference a
74block of memory, it is possible to expose any data to the Python programmer
75quite easily. The memory could be a large, constant array in a C extension,
76it could be a raw block of memory for manipulation before passing to an
77operating system library, or it could be used to pass around structured data
78in its native, in-memory format.
Georg Brandl54a3faa2008-01-20 09:30:57 +000079
Antoine Pitrouf7ba2fa2010-09-28 23:39:41 +000080Contrary to most data types exposed by the Python interpreter, buffers
Georg Brandl60203b42010-10-06 10:11:56 +000081are not :c:type:`PyObject` pointers but rather simple C structures. This
Antoine Pitrou99a00a42010-09-28 23:04:04 +000082allows them to be created and copied very simply. When a generic wrapper
Antoine Pitrouc663b582010-09-28 23:59:51 +000083around a buffer is needed, a :ref:`memoryview <memoryview-objects>` object
Antoine Pitrou99a00a42010-09-28 23:04:04 +000084can be created.
85
Stefan Krahabd887d2012-03-06 14:55:06 +010086For short instructions how to write an exporting object, see
87:ref:`Buffer Object Structures <buffer-structs>`. For obtaining
88a buffer, see :c:func:`PyObject_GetBuffer`.
Georg Brandl54a3faa2008-01-20 09:30:57 +000089
Georg Brandl60203b42010-10-06 10:11:56 +000090.. c:type:: Py_buffer
Georg Brandl54a3faa2008-01-20 09:30:57 +000091
Stefan Krah9a2d99e2012-02-25 12:24:21 +010092 .. c:member:: void \*obj
Benjamin Peterson9d0ced32008-09-16 02:24:31 +000093
Stefan Krahabd887d2012-03-06 14:55:06 +010094 A new reference to the exporting object. The reference is owned by
95 the consumer and automatically decremented and set to *NULL* by
96 :c:func:`PyBuffer_Release`. The field is the equivalent of the return
97 value of any standard C-API function.
Stefan Krah9a2d99e2012-02-25 12:24:21 +010098
Stefan Krahabd887d2012-03-06 14:55:06 +010099 As a special case, for *temporary* buffers that are wrapped by
100 :c:func:`PyMemoryView_FromBuffer` or :c:func:`PyBuffer_FillInfo`
101 this field is *NULL*. In general, exporting objects MUST NOT
102 use this scheme.
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100103
104 .. c:member:: void \*buf
105
106 A pointer to the start of the logical structure described by the buffer
107 fields. This can be any location within the underlying physical memory
108 block of the exporter. For example, with negative :c:member:`~Py_buffer.strides`
109 the value may point to the end of the memory block.
110
111 For contiguous arrays, the value points to the beginning of the memory
112 block.
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000113
Georg Brandl60203b42010-10-06 10:11:56 +0000114 .. c:member:: Py_ssize_t len
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000115
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100116 ``product(shape) * itemsize``. For contiguous arrays, this is the length
117 of the underlying memory block. For non-contiguous arrays, it is the length
118 that the logical structure would have if it were copied to a contiguous
119 representation.
120
121 Accessing ``((char *)buf)[0] up to ((char *)buf)[len-1]`` is only valid
122 if the buffer has been obtained by a request that guarantees contiguity. In
123 most cases such a request will be :c:macro:`PyBUF_SIMPLE` or :c:macro:`PyBUF_WRITABLE`.
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000124
Georg Brandl60203b42010-10-06 10:11:56 +0000125 .. c:member:: int readonly
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000126
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100127 An indicator of whether the buffer is read-only. This field is controlled
128 by the :c:macro:`PyBUF_WRITABLE` flag.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000129
Georg Brandl60203b42010-10-06 10:11:56 +0000130 .. c:member:: Py_ssize_t itemsize
Georg Brandl54a3faa2008-01-20 09:30:57 +0000131
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100132 Item size in bytes of a single element. Same as the value of :func:`struct.calcsize`
133 called on non-NULL :c:member:`~Py_buffer.format` values.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000134
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100135 Important exception: If a consumer requests a buffer without the
136 :c:macro:`PyBUF_FORMAT` flag, :c:member:`~Py_Buffer.format` will
137 be set to *NULL*, but :c:member:`~Py_buffer.itemsize` still has
138 the value for the original format.
139
140 If :c:member:`~Py_Buffer.shape` is present, the equality
141 ``product(shape) * itemsize == len`` still holds and the consumer
142 can use :c:member:`~Py_buffer.itemsize` to navigate the buffer.
143
144 If :c:member:`~Py_Buffer.shape` is *NULL* as a result of a :c:macro:`PyBUF_SIMPLE`
145 or a :c:macro:`PyBUF_WRITABLE` request, the consumer must disregard
146 :c:member:`~Py_buffer.itemsize` and assume ``itemsize == 1``.
147
148 .. c:member:: const char \*format
149
150 A *NUL* terminated string in :mod:`struct` module style syntax describing
151 the contents of a single item. If this is *NULL*, ``"B"`` (unsigned bytes)
152 is assumed.
153
154 This field is controlled by the :c:macro:`PyBUF_FORMAT` flag.
155
156 .. c:member:: int ndim
157
158 The number of dimensions the memory represents as an n-dimensional array.
159 If it is 0, :c:member:`~Py_Buffer.buf` points to a single item representing
160 a scalar. In this case, :c:member:`~Py_buffer.shape`, :c:member:`~Py_buffer.strides`
161 and :c:member:`~Py_buffer.suboffsets` MUST be *NULL*.
162
163 The macro :c:macro:`PyBUF_MAX_NDIM` limits the maximum number of dimensions
164 to 64. Exporters MUST respect this limit, consumers of multi-dimensional
165 buffers SHOULD be able to handle up to :c:macro:`PyBUF_MAX_NDIM` dimensions.
166
167 .. c:member:: Py_ssize_t \*shape
168
169 An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`
170 indicating the shape of the memory as an n-dimensional array. Note that
171 ``shape[0] * ... * shape[ndim-1] * itemsize`` MUST be equal to
172 :c:member:`~Py_buffer.len`.
173
174 Shape values are restricted to ``shape[n] >= 0``. The case
175 ``shape[n] == 0`` requires special attention. See `complex arrays`_
176 for further information.
177
178 The shape array is read-only for the consumer.
179
180 .. c:member:: Py_ssize_t \*strides
181
182 An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`
183 giving the number of bytes to skip to get to a new element in each
184 dimension.
185
186 Stride values can be any integer. For regular arrays, strides are
187 usually positive, but a consumer MUST be able to handle the case
188 ``strides[n] <= 0``. See `complex arrays`_ for further information.
189
190 The strides array is read-only for the consumer.
191
192 .. c:member:: Py_ssize_t \*suboffsets
193
194 An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`.
195 If ``suboffsets[n] >= 0``, the values stored along the nth dimension are
196 pointers and the suboffset value dictates how many bytes to add to each
197 pointer after de-referencing. A suboffset value that is negative
198 indicates that no de-referencing should occur (striding in a contiguous
199 memory block).
200
201 This type of array representation is used by the Python Imaging Library
202 (PIL). See `complex arrays`_ for further information how to access elements
203 of such an array.
204
205 The suboffsets array is read-only for the consumer.
206
207 .. c:member:: void \*internal
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000208
209 This is for use internally by the exporting object. For example, this
210 might be re-cast as an integer by the exporter and used to store flags
211 about whether or not the shape, strides, and suboffsets arrays must be
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100212 freed when the buffer is released. The consumer MUST NOT alter this
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000213 value.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000214
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100215.. _buffer-request-types:
216
217Buffer request types
218====================
219
220Buffers are usually obtained by sending a buffer request to an exporting
221object via :c:func:`PyObject_GetBuffer`. Since the complexity of the logical
222structure of the memory can vary drastically, the consumer uses the *flags*
223argument to specify the exact buffer type it can handle.
224
225All :c:data:`Py_buffer` fields are unambiguously defined by the request
226type.
227
228request-independent fields
229~~~~~~~~~~~~~~~~~~~~~~~~~~
230The following fields are not influenced by *flags* and must always be filled in
231with the correct values: :c:member:`~Py_buffer.obj`, :c:member:`~Py_buffer.buf`,
232:c:member:`~Py_buffer.len`, :c:member:`~Py_buffer.itemsize`, :c:member:`~Py_buffer.ndim`.
233
234
235readonly, format
236~~~~~~~~~~~~~~~~
237
238 .. c:macro:: PyBUF_WRITABLE
239
240 Controls the :c:member:`~Py_buffer.readonly` field. If set, the exporter
241 MUST provide a writable buffer or else report failure. Otherwise, the
242 exporter MAY provide either a read-only or writable buffer, but the choice
243 MUST be consistent for all consumers.
244
245 .. c:macro:: PyBUF_FORMAT
246
247 Controls the :c:member:`~Py_buffer.format` field. If set, this field MUST
248 be filled in correctly. Otherwise, this field MUST be *NULL*.
249
250
251:c:macro:`PyBUF_WRITABLE` can be \|'d to any of the flags in the next section.
252Since :c:macro:`PyBUF_SIMPLE` is defined as 0, :c:macro:`PyBUF_WRITABLE`
253can be used as a stand-alone flag to request a simple writable buffer.
254
255:c:macro:`PyBUF_FORMAT` can be \|'d to any of the flags except :c:macro:`PyBUF_SIMPLE`.
256The latter already implies format ``B`` (unsigned bytes).
257
258
259shape, strides, suboffsets
260~~~~~~~~~~~~~~~~~~~~~~~~~~
261
262The flags that control the logical structure of the memory are listed
263in decreasing order of complexity. Note that each flag contains all bits
264of the flags below it.
265
266
267+-----------------------------+-------+---------+------------+
268| Request | shape | strides | suboffsets |
269+=============================+=======+=========+============+
270| .. c:macro:: PyBUF_INDIRECT | yes | yes | if needed |
271+-----------------------------+-------+---------+------------+
272| .. c:macro:: PyBUF_STRIDES | yes | yes | NULL |
273+-----------------------------+-------+---------+------------+
274| .. c:macro:: PyBUF_ND | yes | NULL | NULL |
275+-----------------------------+-------+---------+------------+
276| .. c:macro:: PyBUF_SIMPLE | NULL | NULL | NULL |
277+-----------------------------+-------+---------+------------+
278
279
280contiguity requests
281~~~~~~~~~~~~~~~~~~~
282
283C or Fortran contiguity can be explicitly requested, with and without stride
284information. Without stride information, the buffer must be C-contiguous.
285
286+-----------------------------------+-------+---------+------------+--------+
287| Request | shape | strides | suboffsets | contig |
288+===================================+=======+=========+============+========+
289| .. c:macro:: PyBUF_C_CONTIGUOUS | yes | yes | NULL | C |
290+-----------------------------------+-------+---------+------------+--------+
291| .. c:macro:: PyBUF_F_CONTIGUOUS | yes | yes | NULL | F |
292+-----------------------------------+-------+---------+------------+--------+
293| .. c:macro:: PyBUF_ANY_CONTIGUOUS | yes | yes | NULL | C or F |
294+-----------------------------------+-------+---------+------------+--------+
295| .. c:macro:: PyBUF_ND | yes | NULL | NULL | C |
296+-----------------------------------+-------+---------+------------+--------+
297
298
299compound requests
300~~~~~~~~~~~~~~~~~
301
302All possible requests are fully defined by some combination of the flags in
303the previous section. For convenience, the buffer protocol provides frequently
304used combinations as single flags.
305
306In the following table *U* stands for undefined contiguity. The consumer would
307have to call :c:func:`PyBuffer_IsContiguous` to determine contiguity.
308
309
310
311+-------------------------------+-------+---------+------------+--------+----------+--------+
312| Request | shape | strides | suboffsets | contig | readonly | format |
313+===============================+=======+=========+============+========+==========+========+
314| .. c:macro:: PyBUF_FULL | yes | yes | if needed | U | 0 | yes |
315+-------------------------------+-------+---------+------------+--------+----------+--------+
316| .. c:macro:: PyBUF_FULL_RO | yes | yes | if needed | U | 1 or 0 | yes |
317+-------------------------------+-------+---------+------------+--------+----------+--------+
318| .. c:macro:: PyBUF_RECORDS | yes | yes | NULL | U | 0 | yes |
319+-------------------------------+-------+---------+------------+--------+----------+--------+
320| .. c:macro:: PyBUF_RECORDS_RO | yes | yes | NULL | U | 1 or 0 | yes |
321+-------------------------------+-------+---------+------------+--------+----------+--------+
322| .. c:macro:: PyBUF_STRIDED | yes | yes | NULL | U | 0 | NULL |
323+-------------------------------+-------+---------+------------+--------+----------+--------+
324| .. c:macro:: PyBUF_STRIDED_RO | yes | yes | NULL | U | 1 or 0 | NULL |
325+-------------------------------+-------+---------+------------+--------+----------+--------+
326| .. c:macro:: PyBUF_CONTIG | yes | NULL | NULL | C | 0 | NULL |
327+-------------------------------+-------+---------+------------+--------+----------+--------+
328| .. c:macro:: PyBUF_CONTIG_RO | yes | NULL | NULL | C | 1 or 0 | NULL |
329+-------------------------------+-------+---------+------------+--------+----------+--------+
330
331
332Complex arrays
333==============
334
335NumPy-style: shape and strides
336~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
337
338The logical structure of NumPy-style arrays is defined by :c:member:`~Py_buffer.itemsize`,
339:c:member:`~Py_buffer.ndim`, :c:member:`~Py_buffer.shape` and :c:member:`~Py_buffer.strides`.
340
341If ``ndim == 0``, the memory location pointed to by :c:member:`~Py_buffer.buf` is
342interpreted as a scalar of size :c:member:`~Py_buffer.itemsize`. In that case,
343both :c:member:`~Py_buffer.shape` and :c:member:`~Py_buffer.strides` are *NULL*.
344
345If :c:member:`~Py_buffer.strides` is *NULL*, the array is interpreted as
346a standard n-dimensional C-array. Otherwise, the consumer must access an
347n-dimensional array as follows:
348
349 ``ptr = (char *)buf + indices[0] * strides[0] + ... + indices[n-1] * strides[n-1]``
350 ``item = *((typeof(item) *)ptr);``
351
352
353As noted above, :c:member:`~Py_buffer.buf` can point to any location within
354the actual memory block. An exporter can check the validity of a buffer with
355this function:
356
357.. code-block:: python
358
359 def verify_structure(memlen, itemsize, ndim, shape, strides, offset):
360 """Verify that the parameters represent a valid array within
361 the bounds of the allocated memory:
362 char *mem: start of the physical memory block
363 memlen: length of the physical memory block
364 offset: (char *)buf - mem
365 """
366 if offset % itemsize:
367 return False
368 if offset < 0 or offset+itemsize > memlen:
369 return False
370 if any(v % itemsize for v in strides):
371 return False
372
373 if ndim <= 0:
374 return ndim == 0 and not shape and not strides
375 if 0 in shape:
376 return True
377
378 imin = sum(strides[j]*(shape[j]-1) for j in range(ndim)
379 if strides[j] <= 0)
380 imax = sum(strides[j]*(shape[j]-1) for j in range(ndim)
381 if strides[j] > 0)
382
383 return 0 <= offset+imin and offset+imax+itemsize <= memlen
384
385
386PIL-style: shape, strides and suboffsets
387~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
388
389In addition to the regular items, PIL-style arrays can contain pointers
390that must be followed in order to get to the next element in a dimension.
391For example, the regular three-dimensional C-array ``char v[2][2][3]`` can
392also be viewed as an array of 2 pointers to 2 two-dimensional arrays:
393``char (*v[2])[2][3]``. In suboffsets representation, those two pointers
394can be embedded at the start of :c:member:`~Py_buffer.buf`, pointing
395to two ``char x[2][3]`` arrays that can be located anywhere in memory.
396
397
398Here is a function that returns a pointer to the element in an N-D array
399pointed to by an N-dimensional index when there are both non-NULL strides
400and suboffsets::
401
402 void *get_item_pointer(int ndim, void *buf, Py_ssize_t *strides,
403 Py_ssize_t *suboffsets, Py_ssize_t *indices) {
404 char *pointer = (char*)buf;
405 int i;
406 for (i = 0; i < ndim; i++) {
407 pointer += strides[i] * indices[i];
408 if (suboffsets[i] >=0 ) {
409 pointer = *((char**)pointer) + suboffsets[i];
410 }
411 }
412 return (void*)pointer;
413 }
414
Georg Brandl54a3faa2008-01-20 09:30:57 +0000415
Antoine Pitrouc663b582010-09-28 23:59:51 +0000416Buffer-related functions
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000417========================
Georg Brandl54a3faa2008-01-20 09:30:57 +0000418
Georg Brandl60203b42010-10-06 10:11:56 +0000419.. c:function:: int PyObject_CheckBuffer(PyObject *obj)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000420
Antoine Pitrou99a00a42010-09-28 23:04:04 +0000421 Return 1 if *obj* supports the buffer interface otherwise 0. When 1 is
Georg Brandl60203b42010-10-06 10:11:56 +0000422 returned, it doesn't guarantee that :c:func:`PyObject_GetBuffer` will
Antoine Pitrou99a00a42010-09-28 23:04:04 +0000423 succeed.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000424
425
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100426.. c:function:: int PyObject_GetBuffer(PyObject *exporter, Py_buffer *view, int flags)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000427
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100428 Send a request to *exporter* to fill in *view* as specified by *flags*.
429 If the exporter cannot provide a buffer of the exact type, it MUST raise
430 :c:data:`PyExc_BufferError`, set :c:member:`view->obj` to *NULL* and
431 return -1.
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000432
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100433 On success, fill in *view*, set :c:member:`view->obj` to a new reference
Stefan Krahabd887d2012-03-06 14:55:06 +0100434 to *exporter* and return 0. In the case of chained buffer providers
435 that redirect requests to a single object, :c:member:`view->obj` MAY
436 refer to this object instead of *exporter* (See :ref:`Buffer Object Structures <buffer-structs>`).
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000437
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100438 Successful calls to :c:func:`PyObject_GetBuffer` must be paired with calls
439 to :c:func:`PyBuffer_Release`, similar to :c:func:`malloc` and :c:func:`free`.
440 Thus, after the consumer is done with the buffer, :c:func:`PyBuffer_Release`
441 must be called exactly once.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000442
443
Georg Brandl60203b42010-10-06 10:11:56 +0000444.. c:function:: void PyBuffer_Release(Py_buffer *view)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000445
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100446 Release the buffer *view* and decrement the reference count for
447 :c:member:`view->obj`. This function MUST be called when the buffer
448 is no longer being used, otherwise reference leaks may occur.
449
450 It is an error to call this function on a buffer that was not obtained via
451 :c:func:`PyObject_GetBuffer`.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000452
453
Georg Brandl60203b42010-10-06 10:11:56 +0000454.. c:function:: Py_ssize_t PyBuffer_SizeFromFormat(const char *)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000455
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100456 Return the implied :c:data:`~Py_buffer.itemsize` from :c:data:`~Py_buffer.format`.
457 This function is not yet implemented.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000458
459
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100460.. c:function:: int PyBuffer_IsContiguous(Py_buffer *view, char order)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000461
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100462 Return 1 if the memory defined by the *view* is C-style (*order* is
463 ``'C'``) or Fortran-style (*order* is ``'F'``) contiguous or either one
464 (*order* is ``'A'``). Return 0 otherwise.
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000465
466
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100467.. c:function:: void PyBuffer_FillContiguousStrides(int ndim, Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t itemsize, char order)
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000468
469 Fill the *strides* array with byte-strides of a contiguous (C-style if
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100470 *order* is ``'C'`` or Fortran-style if *order* is ``'F'``) array of the
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000471 given shape with the given number of bytes per element.
472
473
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100474.. c:function:: int PyBuffer_FillInfo(Py_buffer *view, PyObject *exporter, void *buf, Py_ssize_t len, int readonly, int flags)
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000475
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100476 Handle buffer requests for an exporter that wants to expose *buf* of size *len*
477 with writability set according to *readonly*. *buf* is interpreted as a sequence
478 of unsigned bytes.
479
480 The *flags* argument indicates the request type. This function always fills in
481 *view* as specified by flags, unless *buf* has been designated as read-only
482 and :c:macro:`PyBUF_WRITABLE` is set in *flags*.
483
484 On success, set :c:member:`view->obj` to a new reference to *exporter* and
485 return 0. Otherwise, raise :c:data:`PyExc_BufferError`, set
486 :c:member:`view->obj` to *NULL* and return -1;
487
488 If this function is used as part of a :ref:`getbufferproc <buffer-structs>`,
489 *exporter* MUST be set to the exporting object. Otherwise, *exporter* MUST
490 be NULL.
491
492
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000493