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());
}
}
|