package jetbrains.mps.internal.collections.runtime.impl;
/*Generated by MPS */
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;
public class ReversingSequence<T> extends AbstractChainedSequence<T, T> {
public ReversingSequence(Iterable<T> input) {
super(input);
}
@Override
public Iterator<T> iterator() {
List<T> cache = new ArrayList<T>();
for (T u : getInput()) {
cache.add(u);
}
return new ReversingSequence.ReversingIterator<T>(cache.listIterator(cache.size()));
}
private static class ReversingIterator<U> implements Iterator<U> {
private ListIterator<U> listIterator;
public ReversingIterator(ListIterator<U> listIterator) {
this.listIterator = listIterator;
}
@Override
public boolean hasNext() {
return listIterator.hasPrevious();
}
@Override
public U next() {
return listIterator.previous();
}
@Override
public void remove() {
listIterator.remove();
}
}
}