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

package io.netty.channel.nio;

import java.util.Arrays;
import java.util.NoSuchElementException;
import java.util.Iterator;
import java.nio.channels.SelectionKey;
import java.util.AbstractSet;

final class SelectedSelectionKeySet extends AbstractSet<SelectionKey>
{
    SelectionKey[] keys;
    int size;
    
    SelectedSelectionKeySet() {
        this.keys = new SelectionKey[1024];
    }
    
    @Override
    public boolean add(final SelectionKey o) {
        if (o == null) {
            return false;
        }
        if (this.size == this.keys.length) {
            this.increaseCapacity();
        }
        this.keys[this.size++] = o;
        return true;
    }
    
    @Override
    public boolean remove(final Object o) {
        return false;
    }
    
    @Override
    public boolean contains(final Object o) {
        final SelectionKey[] array = this.keys;
        for (int i = 0, s = this.size; i < s; ++i) {
            final SelectionKey k = array[i];
            if (k.equals(o)) {
                return true;
            }
        }
        return false;
    }
    
    @Override
    public int size() {
        return this.size;
    }
    
    @Override
    public Iterator<SelectionKey> iterator() {
        return new Iterator<SelectionKey>() {
            private int idx;
            
            @Override
            public boolean hasNext() {
                return this.idx < SelectedSelectionKeySet.this.size;
            }
            
            @Override
            public SelectionKey next() {
                if (!this.hasNext()) {
                    throw new NoSuchElementException();
                }
                return SelectedSelectionKeySet.this.keys[this.idx++];
            }
            
            @Override
            public void remove() {
                throw new UnsupportedOperationException();
            }
        };
    }
    
    void reset() {
        this.reset(0);
    }
    
    void reset(final int start) {
        Arrays.fill(this.keys, start, this.size, null);
        this.size = 0;
    }
    
    private void increaseCapacity() {
        final SelectionKey[] newKeys = new SelectionKey[this.keys.length << 1];
        System.arraycopy(this.keys, 0, newKeys, 0, this.size);
        this.keys = newKeys;
    }
}
