symbian-qemu-0.9.1-12/python-2.6.1/Doc/c-api/iter.rst
changeset 1 2fb8b9db1c86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Doc/c-api/iter.rst	Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,50 @@
+.. highlightlang:: c
+
+.. _iterator:
+
+Iterator Protocol
+=================
+
+.. versionadded:: 2.2
+
+There are only a couple of functions specifically for working with iterators.
+
+
+.. cfunction:: int PyIter_Check(PyObject *o)
+
+   Return true if the object *o* supports the iterator protocol.
+
+
+.. cfunction:: PyObject* PyIter_Next(PyObject *o)
+
+   Return the next value from the iteration *o*.  If the object is an iterator,
+   this retrieves the next value from the iteration, and returns *NULL* with no
+   exception set if there are no remaining items.  If the object is not an
+   iterator, :exc:`TypeError` is raised, or if there is an error in retrieving the
+   item, returns *NULL* and passes along the exception.
+
+To write a loop which iterates over an iterator, the C code should look
+something like this::
+
+   PyObject *iterator = PyObject_GetIter(obj);
+   PyObject *item;
+
+   if (iterator == NULL) {
+       /* propagate error */
+   }
+
+   while (item = PyIter_Next(iterator)) {
+       /* do something with item */
+       ...
+       /* release reference when done */
+       Py_DECREF(item);
+   }
+
+   Py_DECREF(iterator);
+
+   if (PyErr_Occurred()) {
+       /* propagate error */
+   }
+   else {
+       /* continue doing useful work */
+   }