From: <cg...@us...> - 2008-12-04 23:52:04
|
Revision: 5693 http://jython.svn.sourceforge.net/jython/?rev=5693&view=rev Author: cgroves Date: 2008-12-04 23:52:01 +0000 (Thu, 04 Dec 2008) Log Message: ----------- Expose __iter__ on Iterator in addition to Iterable and Map Modified Paths: -------------- branches/newstyle-java-types/src/org/python/core/PyJavaType.java Modified: branches/newstyle-java-types/src/org/python/core/PyJavaType.java =================================================================== --- branches/newstyle-java-types/src/org/python/core/PyJavaType.java 2008-12-04 02:30:34 UTC (rev 5692) +++ branches/newstyle-java-types/src/org/python/core/PyJavaType.java 2008-12-04 23:52:01 UTC (rev 5693) @@ -349,14 +349,18 @@ } } - private static class IterableIter extends PyIterator { + private static class IteratorIter extends PyIterator { private Iterator<Object> proxy; - public IterableIter(Iterable<Object> proxy) { - this.proxy = proxy.iterator(); + public IteratorIter(Iterable<Object> proxy) { + this(proxy.iterator()); } + public IteratorIter(Iterator<Object> proxy) { + this.proxy = proxy; + } + public PyObject __iternext__() { return proxy.hasNext() ? Py.java2py(proxy.next()) : null; } @@ -388,7 +392,7 @@ PyBuiltinMethodNarrow iterableProxy = new PyBuiltinMethodNarrow("__iter__", 0, 0) { public PyObject __call__() { - return new IterableIter(((Iterable)self.getJavaProxy())); + return new IteratorIter(((Iterable)self.getJavaProxy())); } }; collectionProxies.put(Iterable.class, new PyBuiltinMethod[] {iterableProxy}); @@ -411,6 +415,13 @@ collectionProxies.put(Collection.class, new PyBuiltinMethod[] {lenProxy, containsProxy}); + PyBuiltinMethodNarrow iteratorProxy = new PyBuiltinMethodNarrow("__iter__", 0, 0) { + public PyObject __call__() { + return new IteratorIter(((Iterator)self.getJavaProxy())); + } + }; + collectionProxies.put(Iterator.class, new PyBuiltinMethod[] {iteratorProxy}); + // Map doesn't extend Collection, so it needs its own version of len, iter and contains PyBuiltinMethodNarrow mapLenProxy = new MapMethod("__len__", 0, 0) { @Override @@ -421,7 +432,7 @@ PyBuiltinMethodNarrow mapIterProxy = new MapMethod("__iter__", 0, 0) { @Override public PyObject __call__() { - return new IterableIter(asMap().keySet()); + return new IteratorIter(asMap().keySet()); } }; PyBuiltinMethodNarrow mapContainsProxy = new MapMethod("__contains__", 1, 1) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |