blob: f703e9caf781b71f2bf7dbf990e4318cbbd87a77 [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
Georg Brandl44ea77b2013-03-28 13:28:44 +0100266.. tabularcolumns:: |p{0.35\linewidth}|l|l|l|
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100267
268+-----------------------------+-------+---------+------------+
269| Request | shape | strides | suboffsets |
270+=============================+=======+=========+============+
271| .. c:macro:: PyBUF_INDIRECT | yes | yes | if needed |
272+-----------------------------+-------+---------+------------+
273| .. c:macro:: PyBUF_STRIDES | yes | yes | NULL |
274+-----------------------------+-------+---------+------------+
275| .. c:macro:: PyBUF_ND | yes | NULL | NULL |
276+-----------------------------+-------+---------+------------+
277| .. c:macro:: PyBUF_SIMPLE | NULL | NULL | NULL |
278+-----------------------------+-------+---------+------------+
279
280
281contiguity requests
282~~~~~~~~~~~~~~~~~~~
283
284C or Fortran contiguity can be explicitly requested, with and without stride
285information. Without stride information, the buffer must be C-contiguous.
286
Georg Brandl44ea77b2013-03-28 13:28:44 +0100287.. tabularcolumns:: |p{0.35\linewidth}|l|l|l|l|
288
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100289+-----------------------------------+-------+---------+------------+--------+
290| Request | shape | strides | suboffsets | contig |
291+===================================+=======+=========+============+========+
292| .. c:macro:: PyBUF_C_CONTIGUOUS | yes | yes | NULL | C |
293+-----------------------------------+-------+---------+------------+--------+
294| .. c:macro:: PyBUF_F_CONTIGUOUS | yes | yes | NULL | F |
295+-----------------------------------+-------+---------+------------+--------+
296| .. c:macro:: PyBUF_ANY_CONTIGUOUS | yes | yes | NULL | C or F |
297+-----------------------------------+-------+---------+------------+--------+
298| .. c:macro:: PyBUF_ND | yes | NULL | NULL | C |
299+-----------------------------------+-------+---------+------------+--------+
300
301
302compound requests
303~~~~~~~~~~~~~~~~~
304
305All possible requests are fully defined by some combination of the flags in
306the previous section. For convenience, the buffer protocol provides frequently
307used combinations as single flags.
308
309In the following table *U* stands for undefined contiguity. The consumer would
310have to call :c:func:`PyBuffer_IsContiguous` to determine contiguity.
311
Georg Brandl44ea77b2013-03-28 13:28:44 +0100312.. tabularcolumns:: |p{0.35\linewidth}|l|l|l|l|l|l|
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100313
314+-------------------------------+-------+---------+------------+--------+----------+--------+
315| Request | shape | strides | suboffsets | contig | readonly | format |
316+===============================+=======+=========+============+========+==========+========+
317| .. c:macro:: PyBUF_FULL | yes | yes | if needed | U | 0 | yes |
318+-------------------------------+-------+---------+------------+--------+----------+--------+
319| .. c:macro:: PyBUF_FULL_RO | yes | yes | if needed | U | 1 or 0 | yes |
320+-------------------------------+-------+---------+------------+--------+----------+--------+
321| .. c:macro:: PyBUF_RECORDS | yes | yes | NULL | U | 0 | yes |
322+-------------------------------+-------+---------+------------+--------+----------+--------+
323| .. c:macro:: PyBUF_RECORDS_RO | yes | yes | NULL | U | 1 or 0 | yes |
324+-------------------------------+-------+---------+------------+--------+----------+--------+
325| .. c:macro:: PyBUF_STRIDED | yes | yes | NULL | U | 0 | NULL |
326+-------------------------------+-------+---------+------------+--------+----------+--------+
327| .. c:macro:: PyBUF_STRIDED_RO | yes | yes | NULL | U | 1 or 0 | NULL |
328+-------------------------------+-------+---------+------------+--------+----------+--------+
329| .. c:macro:: PyBUF_CONTIG | yes | NULL | NULL | C | 0 | NULL |
330+-------------------------------+-------+---------+------------+--------+----------+--------+
331| .. c:macro:: PyBUF_CONTIG_RO | yes | NULL | NULL | C | 1 or 0 | NULL |
332+-------------------------------+-------+---------+------------+--------+----------+--------+
333
334
335Complex arrays
336==============
337
338NumPy-style: shape and strides
339~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
340
341The logical structure of NumPy-style arrays is defined by :c:member:`~Py_buffer.itemsize`,
342:c:member:`~Py_buffer.ndim`, :c:member:`~Py_buffer.shape` and :c:member:`~Py_buffer.strides`.
343
344If ``ndim == 0``, the memory location pointed to by :c:member:`~Py_buffer.buf` is
345interpreted as a scalar of size :c:member:`~Py_buffer.itemsize`. In that case,
346both :c:member:`~Py_buffer.shape` and :c:member:`~Py_buffer.strides` are *NULL*.
347
348If :c:member:`~Py_buffer.strides` is *NULL*, the array is interpreted as
349a standard n-dimensional C-array. Otherwise, the consumer must access an
350n-dimensional array as follows:
351
352 ``ptr = (char *)buf + indices[0] * strides[0] + ... + indices[n-1] * strides[n-1]``
353 ``item = *((typeof(item) *)ptr);``
354
355
356As noted above, :c:member:`~Py_buffer.buf` can point to any location within
357the actual memory block. An exporter can check the validity of a buffer with
358this function:
359
360.. code-block:: python
361
362 def verify_structure(memlen, itemsize, ndim, shape, strides, offset):
363 """Verify that the parameters represent a valid array within
364 the bounds of the allocated memory:
365 char *mem: start of the physical memory block
366 memlen: length of the physical memory block
367 offset: (char *)buf - mem
368 """
369 if offset % itemsize:
370 return False
371 if offset < 0 or offset+itemsize > memlen:
372 return False
373 if any(v % itemsize for v in strides):
374 return False
375
376 if ndim <= 0:
377 return ndim == 0 and not shape and not strides
378 if 0 in shape:
379 return True
380
381 imin = sum(strides[j]*(shape[j]-1) for j in range(ndim)
382 if strides[j] <= 0)
383 imax = sum(strides[j]*(shape[j]-1) for j in range(ndim)
384 if strides[j] > 0)
385
386 return 0 <= offset+imin and offset+imax+itemsize <= memlen
387
388
389PIL-style: shape, strides and suboffsets
390~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
391
392In addition to the regular items, PIL-style arrays can contain pointers
393that must be followed in order to get to the next element in a dimension.
394For example, the regular three-dimensional C-array ``char v[2][2][3]`` can
395also be viewed as an array of 2 pointers to 2 two-dimensional arrays:
396``char (*v[2])[2][3]``. In suboffsets representation, those two pointers
397can be embedded at the start of :c:member:`~Py_buffer.buf`, pointing
398to two ``char x[2][3]`` arrays that can be located anywhere in memory.
399
400
401Here is a function that returns a pointer to the element in an N-D array
402pointed to by an N-dimensional index when there are both non-NULL strides
403and suboffsets::
404
405 void *get_item_pointer(int ndim, void *buf, Py_ssize_t *strides,
406 Py_ssize_t *suboffsets, Py_ssize_t *indices) {
407 char *pointer = (char*)buf;
408 int i;
409 for (i = 0; i < ndim; i++) {
410 pointer += strides[i] * indices[i];
411 if (suboffsets[i] >=0 ) {
412 pointer = *((char**)pointer) + suboffsets[i];
413 }
414 }
415 return (void*)pointer;
416 }
417
Georg Brandl54a3faa2008-01-20 09:30:57 +0000418
Antoine Pitrouc663b582010-09-28 23:59:51 +0000419Buffer-related functions
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000420========================
Georg Brandl54a3faa2008-01-20 09:30:57 +0000421
Georg Brandl60203b42010-10-06 10:11:56 +0000422.. c:function:: int PyObject_CheckBuffer(PyObject *obj)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000423
Antoine Pitrou99a00a42010-09-28 23:04:04 +0000424 Return 1 if *obj* supports the buffer interface otherwise 0. When 1 is
Georg Brandl60203b42010-10-06 10:11:56 +0000425 returned, it doesn't guarantee that :c:func:`PyObject_GetBuffer` will
Antoine Pitrou99a00a42010-09-28 23:04:04 +0000426 succeed.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000427
428
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100429.. c:function:: int PyObject_GetBuffer(PyObject *exporter, Py_buffer *view, int flags)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000430
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100431 Send a request to *exporter* to fill in *view* as specified by *flags*.
432 If the exporter cannot provide a buffer of the exact type, it MUST raise
433 :c:data:`PyExc_BufferError`, set :c:member:`view->obj` to *NULL* and
434 return -1.
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000435
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100436 On success, fill in *view*, set :c:member:`view->obj` to a new reference
Stefan Krahabd887d2012-03-06 14:55:06 +0100437 to *exporter* and return 0. In the case of chained buffer providers
438 that redirect requests to a single object, :c:member:`view->obj` MAY
439 refer to this object instead of *exporter* (See :ref:`Buffer Object Structures <buffer-structs>`).
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000440
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100441 Successful calls to :c:func:`PyObject_GetBuffer` must be paired with calls
442 to :c:func:`PyBuffer_Release`, similar to :c:func:`malloc` and :c:func:`free`.
443 Thus, after the consumer is done with the buffer, :c:func:`PyBuffer_Release`
444 must be called exactly once.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000445
446
Georg Brandl60203b42010-10-06 10:11:56 +0000447.. c:function:: void PyBuffer_Release(Py_buffer *view)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000448
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100449 Release the buffer *view* and decrement the reference count for
450 :c:member:`view->obj`. This function MUST be called when the buffer
451 is no longer being used, otherwise reference leaks may occur.
452
453 It is an error to call this function on a buffer that was not obtained via
454 :c:func:`PyObject_GetBuffer`.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000455
456
Georg Brandl60203b42010-10-06 10:11:56 +0000457.. c:function:: Py_ssize_t PyBuffer_SizeFromFormat(const char *)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000458
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100459 Return the implied :c:data:`~Py_buffer.itemsize` from :c:data:`~Py_buffer.format`.
460 This function is not yet implemented.
Georg Brandl54a3faa2008-01-20 09:30:57 +0000461
462
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100463.. c:function:: int PyBuffer_IsContiguous(Py_buffer *view, char order)
Georg Brandl54a3faa2008-01-20 09:30:57 +0000464
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100465 Return 1 if the memory defined by the *view* is C-style (*order* is
466 ``'C'``) or Fortran-style (*order* is ``'F'``) contiguous or either one
467 (*order* is ``'A'``). Return 0 otherwise.
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000468
469
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100470.. 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 +0000471
472 Fill the *strides* array with byte-strides of a contiguous (C-style if
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100473 *order* is ``'C'`` or Fortran-style if *order* is ``'F'``) array of the
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000474 given shape with the given number of bytes per element.
475
476
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100477.. 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 +0000478
Stefan Krah9a2d99e2012-02-25 12:24:21 +0100479 Handle buffer requests for an exporter that wants to expose *buf* of size *len*
480 with writability set according to *readonly*. *buf* is interpreted as a sequence
481 of unsigned bytes.
482
483 The *flags* argument indicates the request type. This function always fills in
484 *view* as specified by flags, unless *buf* has been designated as read-only
485 and :c:macro:`PyBUF_WRITABLE` is set in *flags*.
486
487 On success, set :c:member:`view->obj` to a new reference to *exporter* and
488 return 0. Otherwise, raise :c:data:`PyExc_BufferError`, set
489 :c:member:`view->obj` to *NULL* and return -1;
490
491 If this function is used as part of a :ref:`getbufferproc <buffer-structs>`,
492 *exporter* MUST be set to the exporting object. Otherwise, *exporter* MUST
493 be NULL.
494
495
Benjamin Peterson9d0ced32008-09-16 02:24:31 +0000496