[Python-checkins] python/nondist/sandbox/csv _csv.c,1.23,1.24
montanaro@users.sourceforge.net
montanaro@users.sourceforge.net
Sun, 09 Feb 2003 19:42:18 -0800
Update of /cvsroot/python/python/nondist/sandbox/csv
In directory sc8-pr-cvs1:/tmp/cvs-serv6919
Modified Files:
_csv.c
Log Message:
I think this is sufficient to allow csv readers to be iterated by
user-defined classes. Thus, you can delegate to them, e.g., from
csv.DictReader.next() (coming in csv.py)
Index: _csv.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/csv/_csv.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** _csv.c 10 Feb 2003 00:05:14 -0000 1.23
--- _csv.c 10 Feb 2003 03:42:16 -0000 1.24
***************
*** 80,83 ****
--- 80,85 ----
staticforward PyTypeObject Reader_Type;
+ #define ReaderObject_Check(v) ((v)->ob_type == &Reader_Type)
+
typedef struct {
PyObject_HEAD
***************
*** 456,463 ****
* READER
*/
- static struct PyMethodDef Reader_methods[] = {
- { NULL, NULL }
- };
-
#define R_OFF(x) offsetof(ReaderObj, x)
--- 458,461 ----
***************
*** 474,488 ****
};
- static PyObject *
- Reader_getattr(ReaderObj *self, char *name)
- {
- PyObject *rv;
-
- rv = dialect_getattr((PyObject *)self, Reader_memberlist, name);
- if (rv)
- return rv;
- return Py_FindMethod(Reader_methods, (PyObject *)self, name);
- }
-
static int
Reader_setattr(ReaderObj *self, char *name, PyObject *v)
--- 472,475 ----
***************
*** 577,580 ****
--- 564,597 ----
PyDoc_STRVAR(Reader_Type_doc, "CSV reader");
+
+ static PyObject *
+ reader_next(PyObject *self, PyObject *args)
+ {
+ PyObject *result;
+
+ if (!ReaderObject_Check(self))
+ return NULL;
+
+ result = Reader_iternext((ReaderObj *)self);
+ if (result == NULL)
+ PyErr_SetObject(PyExc_StopIteration, Py_None);
+ return result;
+ }
+
+ static struct PyMethodDef Reader_methods[] = {
+ { "next", (PyCFunction)reader_next, METH_NOARGS },
+ { NULL, NULL }
+ };
+
+ static PyObject *
+ Reader_getattr(ReaderObj *self, char *name)
+ {
+ PyObject *rv;
+
+ rv = dialect_getattr((PyObject *)self, Reader_memberlist, name);
+ if (rv)
+ return rv;
+ return Py_FindMethod(Reader_methods, (PyObject *)self, name);
+ }
static PyTypeObject Reader_Type = {