package org.enumerable.lambda.enumerable.collection;
import java.util.Iterator;
import org.enumerable.lambda.Fn1;
import org.enumerable.lambda.Fn2;
/**
* A decorator for {@link Iterable} which includes the {@link EnumerableModule}
* by extension.
*/
public class EIterable<E> extends EnumerableModule<E> {
protected final Iterable<E> iterable;
public EIterable(Iterable<E> iterable) {
this.iterable = iterable;
}
public <R> EIterable<E> each(Fn1<? super E, R> block) {
return (EIterable<E>) super.each(block);
}
public <R> EIterable<E> eachWithIndex(Fn2<? super E, Integer, R> block) {
return (EIterable<E>) super.eachWithIndex(block);
}
public <R> EIterable<E> reverseEach(Fn1<? super E, R> block) {
return (EIterable<E>) super.reverseEach(block);
}
public boolean equals(Object obj) {
if (obj instanceof EIterable<?>)
return this.iterable.equals(((EIterable<?>) obj).iterable);
if (obj instanceof Iterable<?>)
return this.iterable.equals(obj);
return false;
}
public int hashCode() {
return iterable.hashCode();
}
public Iterator<E> iterator() {
return iterable.iterator();
}
public Iterable<E> delegate() {
return iterable;
}
public String toString() {
return iterable.toString();
}
}