package dk.itu.oop.lecture5; import java.util.Iterator; public class SortingIterator implements OOPIterator { private OOPIterator outIterator; public SortingIterator(OOPIterator in){ if ( in.hasNext() ){ OOPIterator odds = new OddFilter( in.cloneMe() ); OOPIterator evens = new EvenFilter(in.cloneMe()); if (evens.hasNext() ){ OOPIterator sortedodds = new SortingIterator(odds); OOPIterator sortedevens = new SortingIterator(evens); outIterator = new CompareMerge(sortedodds,sortedevens); }else outIterator = odds; }else outIterator = in; } public boolean hasNext(){ return outIterator.hasNext(); } public Object next(){ return outIterator.next(); } public Object peek(){ return outIterator.peek(); } public OOPIterator cloneMe(){ try{ SortingIterator clone = (SortingIterator)super.clone(); clone.outIterator = outIterator.cloneMe(); return clone; }catch(CloneNotSupportedException shouldNotHappen){ throw new Error("Object claims not to be able to clone"); } } }