package jetbrains.mps.internal.collections.runtime;
/*Generated by MPS */
import java.util.Set;
import java.io.Serializable;
import java.util.Collections;
import jetbrains.mps.internal.collections.runtime.impl.NullSetSequence;
import java.util.HashSet;
import java.util.List;
import java.util.Arrays;
import java.util.Collection;
public class SetSequence<T> extends AbstractSetSequence<T> implements ISetSequence<T>, Set<T>, Serializable {
private static final long serialVersionUID = 541380543157727748L;
protected SetSequence(Set<T> set) {
super(set);
}
@Override
public ISetSequence<T> asUnmodifiable() {
return new SetSequence<T>(Collections.unmodifiableSet(getSet()));
}
@Override
public ISetSequence<T> asSynchronized() {
return new SetSequence<T>(Collections.unmodifiableSet(getSet()));
}
public static <U> ISetSequence<U> fromArray(U... array) {
if (Sequence.USE_NULL_SEQUENCE) {
if (array == null) {
return NullSetSequence.instance();
}
}
return SetSequence.fromSetAndArray(new HashSet<U>(), array);
}
public static <U> ISetSequence<U> fromSet(Set<U> set) {
if (Sequence.USE_NULL_SEQUENCE) {
if (set == null) {
return NullSetSequence.instance();
}
}
if (set instanceof ISetSequence) {
return (ISetSequence<U>) set;
}
return new SetSequence<U>(set);
}
public static <U> ISetSequence<U> fromSetAndArray(Set<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 NullSetSequence.instance();
} else
if (set == null) {
set = new HashSet<U>();
} else
if (array == null) {
if (set instanceof ISetSequence) {
return (ISetSequence<U>) set;
}
return new SetSequence<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 ISetSequence) {
return (ISetSequence<U>) set;
}
return new SetSequence<U>(set);
}
public static <U> ISetSequence<U> fromIterable(Iterable<U> it) {
if (Sequence.USE_NULL_SEQUENCE) {
if (it == null) {
return NullSetSequence.instance();
}
}
if (it instanceof ISetSequence) {
return (ISetSequence<U>) it;
}
Set<U> set = new HashSet<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);
}
}
return new SetSequence<U>(set);
}
public static <U> ISetSequence<U> fromSetWithValues(Set<U> set, Iterable<? extends U> it) {
Set<U> tmp = set;
if (Sequence.USE_NULL_SEQUENCE) {
if (set == null && it == null) {
return NullSetSequence.instance();
} else
if (set == null) {
tmp = new HashSet<U>();
} else
if (it == null) {
return SetSequence.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 ISetSequence) {
return (ISetSequence<U>) tmp;
}
return new SetSequence<U>(tmp);
}
}