From: Finn B. <bc...@us...> - 2002-01-07 20:13:49
|
Update of /cvsroot/jython/jython/org/python/core In directory usw-pr-cvs1:/tmp/cvs-serv10920 Added Files: CollectionIter.java CollectionIter2.java Log Message: Support iteration over java instances. --- NEW FILE: CollectionIter.java --- // Copyright (c) Finn Bock package org.python.core; import java.util.*; class CollectionIter extends PyObject { PyObject findCollection(Object object) { if (object instanceof Vector) { return new EnumerationIter(((Vector)object).elements()); } if (object instanceof Enumeration) { return new EnumerationIter(((Enumeration)object)); } if (object instanceof Dictionary) { return new EnumerationIter(((Dictionary)object).keys()); } return null; } public PyObject next() { PyObject ret = __iternext__(); if (ret == null) throw Py.StopIteration(null); return ret; } } class EnumerationIter extends CollectionIter { private Enumeration proxy; public EnumerationIter(Enumeration proxy) { this.proxy = proxy; } public PyObject __iternext__() { if (!proxy.hasMoreElements()) return null; return Py.java2py(proxy.nextElement()); } } --- NEW FILE: CollectionIter2.java --- // Copyright (c) Finn Bock package org.python.core; import java.util.*; class CollectionIter2 extends CollectionIter { CollectionIter2() throws Exception { Class.forName("java.util.Collection"); } PyObject findCollection(Object object) { if (object instanceof Map) { return new IteratorIter(((Map)object).entrySet().iterator()); } if (object instanceof Collection) { return new IteratorIter(((Collection)object).iterator()); } if (object instanceof Iterator) { return new IteratorIter(((Iterator)object)); } return null; } } class IteratorIter extends CollectionIter { private Iterator proxy; public IteratorIter(Iterator proxy) { this.proxy = proxy; } public PyObject __iternext__() { if (!proxy.hasNext()) return null; return Py.java2py(proxy.next()); } } |