00001
00002
00003
00004
00005
00006
00007 package edu.tum.cs.util.datastruct;
00008
00009 import java.util.Iterator;
00010 import java.util.NoSuchElementException;
00011 import java.util.Vector;
00012
00013 public class MultiIterator<T> implements Iterable<T> {
00014
00015 Vector<Iterable<T>> collections = new Vector<Iterable<T>>();
00016
00017 public Iterator<T> iterator() {
00018 return new LocalIterator<T>(collections);
00019 }
00020
00021 public void add(Iterable<T> i) {
00022 collections.add(i);
00023 }
00024
00025 public void add(T obj) {
00026 Vector<T> v = new Vector<T>(1);
00027 v.add(obj);
00028 add(v);
00029 }
00030
00031 public boolean isEmpty() {
00032 if(collections.size() == 0)
00033 return true;
00034 return iterator().hasNext();
00035 }
00036
00037 @SuppressWarnings("hiding")
00038 public class LocalIterator<T> implements Iterator<T> {
00039
00040 Vector<Iterable<T>> collections;
00041 Iterator<Iterable<T>> ii;
00042 Iterator<T> curI;
00043
00044 public LocalIterator(Iterable<Iterable<T>> collections) {
00045 ii = collections.iterator();
00046 curI = ii.next().iterator();
00047 }
00048
00049 public boolean hasNext() {
00050 if(curI.hasNext())
00051 return true;
00052 while(!curI.hasNext()) {
00053 if(!ii.hasNext())
00054 return false;
00055 curI = ii.next().iterator();
00056 }
00057 return true;
00058 }
00059
00060 public T next() {
00061 if(!hasNext())
00062 throw new NoSuchElementException();
00063 return curI.next();
00064 }
00065
00066 public void remove() {
00067 throw new RuntimeException("not implemented");
00068 }
00069 }
00070
00071 }