[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 = {