3 static char xreadlines_doc
[] =
6 Return an xreadlines object for the file f.";
17 staticforward PyTypeObject XReadlinesObject_Type
;
20 xreadlines_dealloc(PyXReadlinesObject
*op
)
23 Py_XDECREF(op
->lines
);
27 /* A larger chunk size doesn't seem to make a difference */
28 #define CHUNKSIZE 8192
30 static PyXReadlinesObject
*
31 newreadlinesobject(PyObject
*file
)
33 PyXReadlinesObject
*op
;
34 op
= PyObject_NEW(PyXReadlinesObject
, &XReadlinesObject_Type
);
40 op
->abslineno
= op
->lineno
= op
->lineslen
= 0;
45 xreadlines(PyObject
*self
, PyObject
*args
)
48 PyXReadlinesObject
*ret
;
50 if (!PyArg_ParseTuple(args
, "O:xreadlines", &file
))
52 ret
= newreadlinesobject(file
);
54 return (PyObject
*)ret
;
58 xreadlines_item(PyXReadlinesObject
*a
, int i
)
60 if (i
!= a
->abslineno
) {
61 PyErr_SetString(PyExc_RuntimeError
,
62 "xreadlines object accessed out of order");
65 if (a
->lineno
>= a
->lineslen
) {
67 a
->lines
= PyObject_CallMethod(a
->file
, "readlines", "(i)",
72 if ((a
->lineslen
= PySequence_Size(a
->lines
)) < 0)
76 return PySequence_GetItem(a
->lines
, a
->lineno
++);
79 static PySequenceMethods xreadlines_as_sequence
= {
83 (intargfunc
)xreadlines_item
, /*sq_item*/
86 static PyTypeObject XReadlinesObject_Type
= {
87 PyObject_HEAD_INIT(NULL
)
90 sizeof(PyXReadlinesObject
) + PyGC_HEAD_SIZE
,
92 (destructor
)xreadlines_dealloc
, /*tp_dealloc*/
99 &xreadlines_as_sequence
, /*tp_as_sequence*/
107 Py_TPFLAGS_DEFAULT
, /*tp_flags*/
111 static PyMethodDef xreadlines_methods
[] = {
112 {"xreadlines", xreadlines
, METH_VARARGS
, xreadlines_doc
},
121 XReadlinesObject_Type
.ob_type
= &PyType_Type
;
122 m
= Py_InitModule("xreadlines", xreadlines_methods
);