New in version 2.2.
There are only a couple of functions specifically for working with iterators.
To write a loop which iterates over an iterator, the C code should look something like this:
PyObject *iterator = ...;
PyObject *item;
while (item = PyIter_Next(iter)) {
/* do something with item */
}
if (PyErr_Occurred()) {
/* propogate error */
}
else {
/* continue doing useful work */
}
\section{Buffer Protocol \label{abstract-buffer}}
\begin{cfuncdesc}{int}{PyObject_AsCharBuffer}{PyObject *obj,
const char **buffer,
int *buffer_len}
Returns a pointer to a read-only memory location useable as character-
based input. The \var{obj} argument must support the single-segment
character buffer interface. On success, returns \code{1}, sets
\var{buffer} to the memory location and \var{buffer_len} to the buffer
length. Returns \code{0} and sets a \exception{TypeError} on error.
\versionadded{1.6}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyObject_AsReadBuffer}{PyObject *obj,
const char **buffer,
int *buffer_len}
Returns a pointer to a read-only memory location containing
arbitrary data. The \var{obj} argument must support the
single-segment readable buffer interface. On success, returns
\code{1}, sets \var{buffer} to the memory location and \var{buffer_len}
to the buffer length. Returns \code{0} and sets a
\exception{TypeError} on error.
\versionadded{1.6}
\end{cfuncdesc}
\begin{cfuncdesc}{int}{PyObject_CheckReadBuffer}{PyObject *o}
Returns \code{1} if \var{o} supports the single-segment readable
buffer interface. Otherwise returns \code{0}.
\versionadded{2.2}
\enc{cfuncdesc}
\begin{cfuncdesc}{int}{PyObject_AsWriteBuffer}{PyObject *obj,
const char **buffer,
int *buffer_len}
Returns a pointer to a writeable memory location. The \var{obj}
argument must support the single-segment, character buffer
interface. On success, returns \code{1}, sets \var{buffer} to the
memory location and \var{buffer_len} to the buffer length. Returns
\code{0} and sets a \exception{TypeError} on error.
\versionadded{1.6}
\end{cfuncdesc}