From: Finn B. <bc...@us...> - 2002-06-11 11:58:50
|
Update of /cvsroot/jython/jython/org/python/core In directory usw-pr-cvs1:/tmp/cvs-serv6836 Modified Files: PyCallIter.java PyDictionary.java PyList.java PySequenceIter.java PyStringMap.java Added Files: PyIterator.java Log Message: Use the new PyIterator helper class when implementing iterators. --- NEW FILE: PyIterator.java --- // Copyright 2000 Finn Bock package org.python.core; /** * An abstract helper class usefull when implementing an iterator object. * This implementation supply a correct __iter__() and a next() method * based on the __iternext__() implementation. * The __iternext__() method must be supplied by the subclass. */ public abstract class PyIterator extends PyObject { public PyObject __iter__() { return this; } public static PyString __doc__next = new PyString( "x.next() -> the next value, or raise StopIteration" ); public PyObject next() { PyObject ret = __iternext__(); if (ret == null) throw Py.StopIteration(""); return ret; } public abstract PyObject __iternext__(); } Index: PyCallIter.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyCallIter.java,v retrieving revision 2.1 retrieving revision 2.2 diff -C2 -d -r2.1 -r2.2 *** PyCallIter.java 6 Jan 2002 21:19:13 -0000 2.1 --- PyCallIter.java 11 Jun 2002 11:58:47 -0000 2.2 *************** *** 1,5 **** package org.python.core; ! public class PyCallIter extends PyObject { private PyObject callable; private PyObject sentinel; --- 1,5 ---- package org.python.core; ! public class PyCallIter extends PyIterator { private PyObject callable; private PyObject sentinel; *************** *** 11,18 **** } - public PyObject __iter__() { - return this; - } - public PyObject __iternext__() { PyObject val = null; --- 11,14 ---- *************** *** 27,34 **** return null; return val; - } - - public PyObject next() { - return __iternext__(); } --- 23,26 ---- Index: PyDictionary.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyDictionary.java,v retrieving revision 2.19 retrieving revision 2.20 diff -C2 -d -r2.19 -r2.20 *** PyDictionary.java 30 May 2002 19:36:21 -0000 2.19 --- PyDictionary.java 11 Jun 2002 11:58:47 -0000 2.20 *************** *** 414,430 **** } ! class PyDictionaryIter extends PyObject { private Enumeration enumeration; public PyDictionaryIter(PyObject dict, Enumeration e) { enumeration = e; - } - - public PyObject __iter__() { - return this; - } - - public PyObject next() { - return __iternext__(); } --- 414,422 ---- } ! class PyDictionaryIter extends PyIterator { private Enumeration enumeration; public PyDictionaryIter(PyObject dict, Enumeration e) { enumeration = e; } Index: PyList.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyList.java,v retrieving revision 2.25 retrieving revision 2.26 diff -C2 -d -r2.25 -r2.26 *** PyList.java 27 Nov 2001 13:51:37 -0000 2.25 --- PyList.java 11 Jun 2002 11:58:47 -0000 2.26 *************** *** 134,137 **** --- 134,145 ---- } + public PyList(PyObject o) { + this(); + PyObject iter = o.__iter__(); + for (PyObject item = null; (item = iter.__iternext__()) != null; ) { + append(item); + } + } + public String safeRepr() throws PyIgnoreMethodTag { return "'list' object"; Index: PySequenceIter.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PySequenceIter.java,v retrieving revision 2.1 retrieving revision 2.2 diff -C2 -d -r2.1 -r2.2 *** PySequenceIter.java 6 Jan 2002 21:19:13 -0000 2.1 --- PySequenceIter.java 11 Jun 2002 11:58:47 -0000 2.2 *************** *** 1,5 **** package org.python.core; ! public class PySequenceIter extends PyObject { private PyObject seq; private int idx; --- 1,5 ---- package org.python.core; ! public class PySequenceIter extends PyIterator { private PyObject seq; private int idx; *************** *** 10,23 **** } - public PyObject __iter__() { - return this; - } - public PyObject __iternext__() { return seq.__finditem__(idx++); - } - - public PyObject next() { - return __iternext__(); } --- 10,15 ---- Index: PyStringMap.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyStringMap.java,v retrieving revision 2.14 retrieving revision 2.15 diff -C2 -d -r2.14 -r2.15 *** PyStringMap.java 30 May 2002 19:36:21 -0000 2.14 --- PyStringMap.java 11 Jun 2002 11:58:47 -0000 2.15 *************** *** 547,551 **** } ! class PyStringMapIter extends PyObject { String[] keyTable; PyObject[] valTable; --- 547,551 ---- } ! class PyStringMapIter extends PyIterator { String[] keyTable; PyObject[] valTable; *************** *** 556,567 **** this.valTable = values; this.idx = 0; - } - - public PyObject __iter__() { - return this; - } - - public PyObject next() { - return __iternext__(); } --- 556,559 ---- |