package org.enumerable.lambda.enumerable.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.ListIterator;
import org.enumerable.lambda.Fn1;
import org.enumerable.lambda.Fn2;
/**
* A decorator for {@link List} which includes the {@link EnumerableModule} via
* {@link EIterable}.
*/
public class EList<E> extends ECollection<E> implements List<E> {
public EList() {
this(new ArrayList<E>());
}
public EList(List<E> list) {
super(list);
}
public EList(int length) {
new ArrayList<E>(length);
}
public <R> EList<E> each(Fn1<? super E, R> block) {
return (EList<E>) super.each(block);
}
public <R> EList<E> eachWithIndex(Fn2<? super E, Integer, R> block) {
return (EList<E>) super.eachWithIndex(block);
}
public <R> EList<E> reverseEach(Fn1<? super E, R> block) {
return (EList<E>) super.reverseEach(block);
}
public List<E> delegate() {
return (List<E>) iterable;
}
public void add(int index, E element) {
delegate().add(index, element);
}
public boolean addAll(int index, Collection<? extends E> c) {
return delegate().addAll(index, c);
}
public E get(int index) {
return delegate().get(index);
}
public int indexOf(Object o) {
return delegate().indexOf(o);
}
public int lastIndexOf(Object o) {
return delegate().lastIndexOf(o);
}
public ListIterator<E> listIterator() {
return delegate().listIterator();
}
public ListIterator<E> listIterator(int index) {
return delegate().listIterator(index);
}
public E remove(int index) {
return delegate().remove(index);
}
public E set(int index, E element) {
return delegate().set(index, element);
}
public EList<E> subList(int fromIndex, int toIndex) {
return new EList<E>(delegate().subList(fromIndex, toIndex));
}
}