// 
// Decompiled by Procyon v0.6.0
// 

package it.unimi.dsi.fastutil.chars;

import java.util.Iterator;
import java.util.Spliterator;
import java.util.Collection;
import it.unimi.dsi.fastutil.Size64;
import java.util.Set;

public interface CharSet extends CharCollection, Set<Character>
{
    CharIterator iterator();
    
    default CharSpliterator spliterator() {
        return CharSpliterators.asSpliterator(this.iterator(), Size64.sizeOf(this), 321);
    }
    
    boolean remove(final char p0);
    
    @Deprecated
    default boolean remove(final Object o) {
        return super.remove(o);
    }
    
    @Deprecated
    default boolean add(final Character o) {
        return super.add(o);
    }
    
    @Deprecated
    default boolean contains(final Object o) {
        return super.contains(o);
    }
    
    @Deprecated
    default boolean rem(final char k) {
        return this.remove(k);
    }
    
    default CharSet of() {
        return CharSets.UNMODIFIABLE_EMPTY_SET;
    }
    
    default CharSet of(final char e) {
        return CharSets.singleton(e);
    }
    
    default CharSet of(final char e0, final char e1) {
        final CharArraySet innerSet = new CharArraySet(2);
        innerSet.add(e0);
        if (!innerSet.add(e1)) {
            throw new IllegalArgumentException("Duplicate element: " + e1);
        }
        return CharSets.unmodifiable(innerSet);
    }
    
    default CharSet of(final char e0, final char e1, final char e2) {
        final CharArraySet innerSet = new CharArraySet(3);
        innerSet.add(e0);
        if (!innerSet.add(e1)) {
            throw new IllegalArgumentException("Duplicate element: " + e1);
        }
        if (!innerSet.add(e2)) {
            throw new IllegalArgumentException("Duplicate element: " + e2);
        }
        return CharSets.unmodifiable(innerSet);
    }
    
    default CharSet of(final char... a) {
        switch (a.length) {
            case 0: {
                return of();
            }
            case 1: {
                return of(a[0]);
            }
            case 2: {
                return of(a[0], a[1]);
            }
            case 3: {
                return of(a[0], a[1], a[2]);
            }
            default: {
                final CharSet innerSet = (CharSet)((a.length <= 4) ? new CharArraySet(a.length) : new CharOpenHashSet(a.length));
                for (final char element : a) {
                    if (!innerSet.add(element)) {
                        throw new IllegalArgumentException("Duplicate element: " + element);
                    }
                }
                return CharSets.unmodifiable(innerSet);
            }
        }
    }
}
