From: <pj...@us...> - 2009-10-17 17:07:59
|
Revision: 6869 http://jython.svn.sourceforge.net/jython/?rev=6869&view=rev Author: pjenvey Date: 2009-10-17 17:07:38 +0000 (Sat, 17 Oct 2009) Log Message: ----------- expose PyFastSequenceIter and avoid PyType.fromClass during its construction Modified Paths: -------------- trunk/jython/CoreExposed.includes trunk/jython/src/org/python/core/PyFastSequenceIter.java Modified: trunk/jython/CoreExposed.includes =================================================================== --- trunk/jython/CoreExposed.includes 2009-10-17 16:57:13 UTC (rev 6868) +++ trunk/jython/CoreExposed.includes 2009-10-17 17:07:38 UTC (rev 6869) @@ -15,6 +15,7 @@ org/python/core/PyDictProxy.class org/python/core/PyEnumerate.class org/python/core/PyEllipsis.class +org/python/core/PyFastSequenceIter.class org/python/core/PyFile.class org/python/core/PyFloat.class org/python/core/PyFrame.class Modified: trunk/jython/src/org/python/core/PyFastSequenceIter.java =================================================================== --- trunk/jython/src/org/python/core/PyFastSequenceIter.java 2009-10-17 16:57:13 UTC (rev 6868) +++ trunk/jython/src/org/python/core/PyFastSequenceIter.java 2009-10-17 17:07:38 UTC (rev 6869) @@ -1,19 +1,32 @@ /* Copyright (c) Jython Developers */ package org.python.core; +import org.python.expose.ExposedMethod; +import org.python.expose.ExposedType; + /** * Sequence iterator specialized for accessing the underlying sequence directly. */ +@ExposedType(name = "fastsequenceiterator", base = PyObject.class, isBaseType = false) public class PyFastSequenceIter extends PyIterator { + public static final PyType TYPE = PyType.fromClass(PyFastSequenceIter.class); + private PySequence seq; - private int index = 0; + private int index; public PyFastSequenceIter(PySequence seq) { + super(TYPE); this.seq = seq; } + @ExposedMethod(doc = "x.next() -> the next value, or raise StopIteration") + final PyObject fastsequenceiterator_next() { + return super.next(); + } + + @Override public PyObject __iternext__() { if (seq == null) { return null; @@ -22,13 +35,14 @@ PyObject result; try { result = seq.seq___finditem__(index++); - } catch (PyException exc) { - if (exc.match(Py.StopIteration)) { + } catch (PyException pye) { + if (pye.match(Py.StopIteration)) { seq = null; return null; } - throw exc; + throw pye; } + if (result == null) { seq = null; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |