package xapi.util.impl; import xapi.fu.MappedIterable; import java.util.Iterator; /** * @author James X. Nelson (james@wetheinter.net) * Created on 2/6/16. */ public class ReverseIterable <T> implements MappedIterable<T> { private Iterator<T> iterator; private Iterable<T> iterable; public ReverseIterable(Iterable<T> iterable) { this.iterable = iterable; } public ReverseIterable(Iterator<T> iterator) { this.iterator = iterator; } public static <T> ReverseIterable <T> reverse(Iterable<T> itr) { return new ReverseIterable<T>(itr); } public static <T> ReverseIterable <T> reverse(Iterator<T> itr) { return new ReverseIterable<T>(itr); } @Override public Iterator<T> iterator() { if (iterable != null) { return new ReverseIterator<>(iterable); } else { return new ReverseIterator<>(iterator); } } public Iterable<T> getIterable() { return iterable; } public Iterator<T> getIterator() { return iterator; } }