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); } }