package jetbrains.mps.internal.collections.runtime;
/*Generated by MPS */
import jetbrains.mps.baseLanguage.closures.runtime.AdapterClass;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import java.util.Comparator;
public interface ISequence<T> extends Iterable<T>, IEnumerable<T> {
ISequence<T> where(@AdapterClass(value = "IWhereFilter") _FunctionTypes._return_P1_E0<? extends Boolean, ? super T> filter);
T findFirst(@AdapterClass(value = "IWhereFilter") _FunctionTypes._return_P1_E0<? extends Boolean, ? super T> filter);
T findLast(@AdapterClass(value = "IWhereFilter") _FunctionTypes._return_P1_E0<? extends Boolean, ? super T> filter);
boolean any(@AdapterClass(value = "IWhereFilter") _FunctionTypes._return_P1_E0<? extends Boolean, ? super T> filter);
boolean all(@AdapterClass(value = "IWhereFilter") _FunctionTypes._return_P1_E0<? extends Boolean, ? super T> filter);
<U> ISequence<U> translate(@AdapterClass(value = "ITranslator2") _FunctionTypes._return_P1_E0<? extends Iterable<U>, ? super T> translator);
<U> ISequence<U> select(@AdapterClass(value = "ISelector") _FunctionTypes._return_P1_E0<? extends U, ? super T> selector);
<U> ISequence<U> ofType(Class<U> type);
ISequence<T> sort(@AdapterClass(value = "ISelector") _FunctionTypes._return_P1_E0<? extends Comparable<?>, ? super T> selector, boolean ascending);
ISequence<T> alsoSort(@AdapterClass(value = "ISelector") _FunctionTypes._return_P1_E0<? extends Comparable<?>, ? super T> selector, boolean ascending);
ISequence<T> sort(Comparator<? super T> comparator, boolean ascending);
ISequence<T> distinct();
void visitAll(@AdapterClass(value = "IVisitor") _FunctionTypes._void_P1_E0<? super T> visitor);
ISequence<T> take(int length);
ISequence<T> skip(int length);
ISequence<T> cut(int length);
ISequence<T> tail(int length);
ISequence<T> page(int skip, int skipplustake);
ISequence<T> concat(ISequence<? extends T> that);
ISequence<T> intersect(ISequence<?> that);
ISequence<T> subtract(ISequence<?> that);
ISequence<T> union(ISequence<? extends T> that);
ISequence<T> disjunction(ISequence<? extends T> that);
ISequence<T> reverse();
boolean contains(Object o);
boolean containsSequence(ISequence<? extends T> that);
int indexOf(T t);
int lastIndexOf(T t);
int count();
boolean isEmpty();
boolean isNotEmpty();
T first();
T last();
T reduceLeft(@AdapterClass(value = "ILeftCombinator") _FunctionTypes._return_P2_E0<? extends T, ? super T, ? super T> comb);
T reduceRight(@AdapterClass(value = "IRightCombinator") _FunctionTypes._return_P2_E0<? extends T, ? super T, ? super T> comb);
<S> S foldLeft(S seed, @AdapterClass(value = "ILeftCombinator") _FunctionTypes._return_P2_E0<? extends S, ? super S, ? super T> comb);
<S> S foldRight(S seed, @AdapterClass(value = "IRightCombinator") _FunctionTypes._return_P2_E0<? extends S, ? super T, ? super S> comb);
Iterable<T> toIterable();
IListSequence<T> toListSequence();
T[] toGenericArray();
T[] toGenericArray(Class<T> runtimeClass);
}