From: Finn B. <bc...@us...> - 2000-11-29 18:59:09
|
Update of /cvsroot/jython/jython/org/python/modules In directory slayer.i.sourceforge.net:/tmp/cvs-serv11055 Modified Files: cStringIO.java Log Message: readlines(): Added optional sizehint argument. Added opencheck to all methods. truncate(): Added method. All together this allows the cStringIO to pass the test_StringIO regression test. Index: cStringIO.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/modules/cStringIO.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** cStringIO.java 2000/10/17 19:14:19 1.6 --- cStringIO.java 2000/11/29 18:59:05 1.7 *************** *** 137,140 **** --- 137,141 ---- */ public String read(int size) { + opencheck(); int newpos = (size < 0) ? count : Math.min(pos+size, count); String r = null; *************** *** 179,182 **** --- 180,184 ---- */ public String readline(int length) { + opencheck(); int i = indexOf('\n', pos); int newpos = (i < 0) ? count : i+1; *************** *** 204,207 **** --- 206,210 ---- + /** * Read until EOF using readline() and return a list containing *************** *** 210,217 **** --- 213,235 ---- */ public PyObject readlines() { + return readlines(0); + } + + + /** + * Read until EOF using readline() and return a list containing + * the lines thus read. + * @return a list of the lines. + */ + public PyObject readlines(int sizehint) { + opencheck(); + int total = 0; PyList lines = new PyList(); String line = readline(); while (line.length() > 0) { lines.append(new PyString(line)); + total += line.length(); + if (0 < sizehint && sizehint <= total) + break; line = readline(); } *************** *** 219,222 **** --- 237,258 ---- } + /** + * truncate the file at the current position. + */ + public void truncate() { + truncate(-1); + } + + /** + * truncate the file at the position pos. + */ + public void truncate(int pos) { + opencheck(); + if (pos < 0) + pos = this.pos; + if (count > pos) + count = pos; + } + private void expandCapacity(int newLength) { *************** *** 238,241 **** --- 274,278 ---- */ public void write(String s) { + opencheck(); int newpos = pos + s.length(); *************** *** 276,280 **** * Flush the internal buffer. Does nothing. */ ! public void flush() { } --- 313,319 ---- * Flush the internal buffer. Does nothing. */ ! public void flush() { ! opencheck(); ! } *************** *** 285,290 **** --- 324,336 ---- */ public String getvalue() { + opencheck(); return new String(buf, 0, count); } + + + private final void opencheck() { + if (buf == null) + throw Py.ValueError("I/O operation on closed file"); + } } |