57 lines
1.5 KiB
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;
|
|
}
|
|
|
|
} |