All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.digitalid.utility.immutable.ImmutableSet Maven / Gradle / Ivy

The newest version!
package net.digitalid.utility.immutable;

import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashSet;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

import net.digitalid.utility.annotations.method.Pure;
import net.digitalid.utility.annotations.ownership.Capturable;
import net.digitalid.utility.annotations.ownership.Captured;
import net.digitalid.utility.annotations.ownership.NonCaptured;
import net.digitalid.utility.annotations.parameter.Unmodified;
import net.digitalid.utility.functional.iterables.CollectionIterable;
import net.digitalid.utility.functional.iterables.FiniteIterable;
import net.digitalid.utility.functional.iterators.ReadOnlyIterableIterator;
import net.digitalid.utility.functional.iterators.ReadOnlyIterator;
import net.digitalid.utility.validation.annotations.type.Immutable;

/**
 * This class implements an immutable set.
 */
@Immutable
public class ImmutableSet extends LinkedHashSet implements CollectionIterable {
    
    /* -------------------------------------------------- Constructors -------------------------------------------------- */
    
    protected ImmutableSet(@NonCaptured @Unmodified @Nonnull Iterable iterable) {
        for (E element : iterable) {
            super.add(element);
        }
    }
    
    /**
     * Returns an immutable set with the elements of the given array or null if the given array is null.
     * The given array is not captured as its elements are copied to the immutable set.
     */
    @Pure
    @SafeVarargs
    public static  ImmutableSet withElements(@NonCaptured @Unmodified E... elements) {
        return elements == null ? null : new ImmutableSet<>(Arrays.asList(elements));
    }
    
    /**
     * Returns an immutable set with the elements of the given iterable or null if the given iterable is null.
     */
    @Pure
    public static  ImmutableSet withElementsOf(FiniteIterable iterable) {
        return iterable == null ? null : new ImmutableSet<>(iterable);
    }
    
    /**
     * Returns an immutable set with the elements of the given collection or null if the given collection is null.
     * The given collection is not captured as its elements are copied to the immutable set.
     */
    @Pure
    public static  ImmutableSet withElementsOfCollection(@NonCaptured @Unmodified Collection collection) {
        return collection == null ? null : new ImmutableSet<>(collection);
    }
    
    /* -------------------------------------------------- Modified Operations -------------------------------------------------- */
    
    @Pure
    @Override
    public @Capturable @Nonnull ReadOnlyIterator iterator() {
        return ReadOnlyIterableIterator.with(super.iterator());
    }
    
    /* -------------------------------------------------- Unsupported Operations -------------------------------------------------- */
    
    @Pure
    @Override
    public final boolean add(@Captured E element) {
        throw new UnsupportedOperationException();
    }
    
    @Pure
    @Override
    public final boolean addAll(@NonCaptured @Unmodified @Nonnull Collection collection) {
        throw new UnsupportedOperationException();
    }
    
    @Pure
    @Override
    public final boolean remove(@NonCaptured @Unmodified @Nullable Object object) {
        throw new UnsupportedOperationException();
    }
    
    @Pure
    @Override
    public final boolean removeAll(@NonCaptured @Unmodified @Nonnull Collection collection) {
        throw new UnsupportedOperationException();
    }
    
    @Pure
    @Override
    public final boolean retainAll(@NonCaptured @Unmodified @Nonnull Collection collection) {
        throw new UnsupportedOperationException();
    }
    
    @Pure
    @Override
    public final void clear() {
        throw new UnsupportedOperationException();
    }
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy