package org.osgl.util;
import org.osgl.$;
import java.util.Collection;
import java.util.EnumSet;
/**
* Created by luog on 2/02/14.
*/
class ImmutableSet<T> extends DelegatingSet<T> {
ImmutableSet(Collection<? extends T> collection) {
super(collection, true);
}
@Override
public boolean add(T t) {
throw E.unsupport();
}
@Override
public boolean remove(Object o) {
throw E.unsupport();
}
@Override
public boolean addAll(Collection<? extends T> c) {
throw E.unsupport();
}
@Override
public boolean retainAll(Collection<?> c) {
throw E.unsupport();
}
@Override
public boolean removeAll(Collection<?> c) {
throw E.unsupport();
}
@Override
public void clear() {
throw E.unsupport();
}
@Override
protected EnumSet<C.Feature> initFeatures() {
EnumSet<C.Feature> fs = super.initFeatures();
fs.add(C.Feature.IMMUTABLE);
fs.add(C.Feature.READONLY);
return fs;
}
static <T> C.Set<T> of(T[] data) {
E.NPE(data);
int len = data.length;
if (len == 0) {
return Nil.set();
} else if (len == 1) {
return $.val(data[0]);
} else {
return new ImmutableSet<T>(C.listOf(data));
}
}
static <T> C.Set<T> of(Collection<? extends T> data) {
if (data instanceof C.Set) {
C.Set<T> set = (C.Set<T>)data;
if (set.is(C.Feature.IMMUTABLE)) {
return set;
}
}
return new ImmutableSet<T>(data);
}
}