// Copyright (c) 2001 Finn Bock. package org.python.modules; import org.python.core.*; public class xreadlines { private final static int CHUNKSIZE = 8192; public static PyString __doc__xreadlines = new PyString("xreadlines(f)\n" + "\n" + "Return an xreadlines object for the file f."); public static PyObject xreadlines$(PyObject file) { return new XReadlineObj(file); } public static class XReadlineObj extends PyObject { private PyObject file; private PyObject lines = null; private int lineslen = 0; private int lineno = 0; private int abslineno = 0; public XReadlineObj(PyObject file) { this.file = file; } public PyObject __iter__() { return new PySequenceIter(this); } public PyObject __finditem__(PyObject idx) { return __finditem__(((PyInteger) idx.__int__()).getValue()); } public PyObject __finditem__(int idx) { if (idx != abslineno) { throw Py.RuntimeError("xreadlines object accessed out of order"); } if (lineno >= lineslen) { lines = file.invoke("readlines", Py.newInteger(CHUNKSIZE)); lineno = 0; lineslen = lines.__len__(); } abslineno++; return lines.__finditem__(lineno++); } public String toString() { return "<xreadlines object " + Py.idstr(this) + ">"; } } }