WALA/com.ibm.wala.util/src/com/ibm/wala/util/collections/ComposedIterator.java

57 lines
1.5 KiB
Java

/*******************************************************************************
* Copyright (c) 2002 - 2006 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package com.ibm.wala.util.collections;
import java.util.Iterator;
/**
* A 2-level iterator. has not been tested yet!
*/
public abstract class ComposedIterator<O,I> implements Iterator<I> {
private final Iterator<O> outer;
private Iterator<? extends I> inner;
public ComposedIterator(Iterator<O> outer) {
this.outer = outer;
advanceOuter();
}
private void advanceOuter() {
while (outer.hasNext()) {
inner = makeInner(outer.next());
if (inner.hasNext()) {
break;
}
}
if (inner != null && !inner.hasNext()) {
inner = null;
}
}
public abstract Iterator<? extends I> makeInner(O outer);
public void remove() throws UnsupportedOperationException{
throw new UnsupportedOperationException();
}
public boolean hasNext() {
return (inner != null);
}
public I next() {
I result = inner.next();
if (!inner.hasNext()) {
advanceOuter();
}
return result;
}
}