package jetbrains.mps.internal.collections.runtime;
/*Generated by MPS */
import java.util.SortedSet;
import java.io.Serializable;
import java.util.Comparator;
import java.util.Collections;
import jetbrains.mps.internal.collections.runtime.impl.NullSortedSetSequence;
import java.util.TreeSet;
import java.util.List;
import java.util.Arrays;
import java.util.Collection;
public class SortedSetSequence<T> extends AbstractSetSequence<T> implements ISortedSetSequence<T>, SortedSet<T>, Serializable {
private static final long serialVersionUID = 5639537706255994099L;
protected SortedSetSequence(SortedSet<T> set) {
super(set);
}
@Override
public T first() {
return getSet().first();
}
@Override
public T last() {
return getSet().last();
}
@Override
public ISortedSetSequence<T> headSet(T toElement) {
return SortedSetSequence.fromSet(getSet().headSet(toElement));
}
@Override
public ISortedSetSequence<T> subSet(T fromElement, T toElement) {
return SortedSetSequence.fromSet(getSet().subSet(fromElement, toElement));
}
@Override
public ISortedSetSequence<T> tailSet(T fromElement) {
return SortedSetSequence.fromSet(getSet().tailSet(fromElement));
}
@Override
public Comparator<? super T> comparator() {
return getSet().comparator();
}
@Override
public ISortedSetSequence<T> addSequence(ISequence<? extends T> seq) {
return (ISortedSetSequence<T>) super.addSequence(seq);
}
@Override
public ISortedSetSequence<T> removeSequence(ISequence<? extends T> seq) {
return (ISortedSetSequence<T>) super.removeSequence(seq);
}
@Override
public ISortedSetSequence<T> asUnmodifiable() {
return new SortedSetSequence<T>(Collections.unmodifiableSortedSet(getSet()));
}
@Override
public ISortedSetSequence<T> asSynchronized() {
return new SortedSetSequence<T>(CollectionUtils.synchronizedSortedSet(getSet()));
}
@Override
protected SortedSet<T> getSet() {
return (SortedSet<T>) super.getSet();
}
public static <U> ISortedSetSequence<U> fromArray(U... array) {
if (Sequence.USE_NULL_SEQUENCE) {
if (array == null) {
return NullSortedSetSequence.<U>instance();
}
}
return SortedSetSequence.fromSetAndArray(new TreeSet<U>(), array);
}
public static <U> ISortedSetSequence<U> fromSet(SortedSet<U> set) {
if (Sequence.USE_NULL_SEQUENCE) {
if (set == null) {
return NullSortedSetSequence.instance();
}
}
if (set instanceof ISortedSetSequence) {
return (ISortedSetSequence<U>) set;
}
return new SortedSetSequence<U>(set);
}
public static <U> ISortedSetSequence<U> fromSetAndArray(SortedSet<U> set, U... array) {
if (Sequence.NULL_ARRAY_IS_SINGLETON) {
if (array == null) {
array = (U[]) Sequence.nullSingletonArray();
}
}
if (Sequence.USE_NULL_SEQUENCE) {
if (set == null && array == null) {
return NullSortedSetSequence.instance();
} else
if (set == null) {
set = new TreeSet<U>();
} else
if (array == null) {
if (set instanceof ISortedSetSequence) {
return (ISortedSetSequence<U>) set;
}
return new SortedSetSequence<U>(set);
}
}
List<U> input = Arrays.asList(array);
if (Sequence.IGNORE_NULL_VALUES) {
for (U u : input) {
if (u != null) {
set.add(u);
}
}
} else {
set.addAll(input);
}
if (set instanceof ISortedSetSequence) {
return (ISortedSetSequence<U>) set;
}
return new SortedSetSequence<U>(set);
}
public static <U> ISortedSetSequence<U> fromIterable(Iterable<U> it) {
if (Sequence.USE_NULL_SEQUENCE) {
if (it == null) {
return NullSortedSetSequence.instance();
}
}
if (it instanceof ISetSequence) {
return (ISortedSetSequence<U>) it;
}
SortedSet<U> set = new TreeSet<U>();
if (Sequence.IGNORE_NULL_VALUES) {
for (U u : it) {
if (u != null) {
set.add(u);
}
}
} else
if (it instanceof Collection) {
set.addAll((Collection<? extends U>) it);
} else {
for (U u : it) {
set.add(u);
}
}
for (U u : it) {
set.add(u);
}
return new SortedSetSequence<U>(set);
}
public static <U> ISortedSetSequence<U> fromSetWithValues(SortedSet<U> set, Iterable<U> it) {
SortedSet<U> tmp = set;
if (Sequence.USE_NULL_SEQUENCE) {
if (set == null && it == null) {
return NullSortedSetSequence.instance();
} else
if (set == null) {
tmp = new TreeSet<U>();
} else
if (it == null) {
return SortedSetSequence.fromSet(set);
}
}
if (Sequence.IGNORE_NULL_VALUES) {
for (U u : it) {
if (u != null) {
tmp.add(u);
}
}
} else
if (it instanceof Collection) {
tmp.addAll((Collection<? extends U>) it);
} else {
for (U u : it) {
tmp.add(u);
}
}
if (tmp instanceof ISortedSetSequence) {
return (ISortedSetSequence<U>) tmp;
}
return new SortedSetSequence<U>(tmp);
}
}