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

package io.netty.channel.nio;

import io.netty.util.internal.logging.InternalLoggerFactory;
import io.netty.channel.IoEventLoop;
import io.netty.channel.IoHandlerFactory;
import java.util.Iterator;
import io.netty.util.concurrent.EventExecutor;
import io.netty.channel.EventLoopTaskQueueFactory;
import io.netty.util.concurrent.RejectedExecutionHandler;
import io.netty.util.concurrent.EventExecutorChooserFactory;
import io.netty.util.concurrent.RejectedExecutionHandlers;
import io.netty.channel.SelectStrategyFactory;
import io.netty.channel.DefaultSelectStrategyFactory;
import java.nio.channels.spi.SelectorProvider;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.Executor;
import io.netty.util.internal.logging.InternalLogger;
import io.netty.channel.IoEventLoopGroup;
import io.netty.channel.MultiThreadIoEventLoopGroup;

@Deprecated
public class NioEventLoopGroup extends MultiThreadIoEventLoopGroup implements IoEventLoopGroup
{
    private static final InternalLogger LOGGER;
    
    public NioEventLoopGroup() {
        this(0);
    }
    
    public NioEventLoopGroup(final int nThreads) {
        this(nThreads, (Executor)null);
    }
    
    public NioEventLoopGroup(final ThreadFactory threadFactory) {
        this(0, threadFactory, SelectorProvider.provider());
    }
    
    public NioEventLoopGroup(final int nThreads, final ThreadFactory threadFactory) {
        this(nThreads, threadFactory, SelectorProvider.provider());
    }
    
    public NioEventLoopGroup(final int nThreads, final Executor executor) {
        this(nThreads, executor, SelectorProvider.provider());
    }
    
    public NioEventLoopGroup(final int nThreads, final ThreadFactory threadFactory, final SelectorProvider selectorProvider) {
        this(nThreads, threadFactory, selectorProvider, DefaultSelectStrategyFactory.INSTANCE);
    }
    
    public NioEventLoopGroup(final int nThreads, final ThreadFactory threadFactory, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory) {
        super(nThreads, threadFactory, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), new Object[] { RejectedExecutionHandlers.reject() });
    }
    
    public NioEventLoopGroup(final int nThreads, final Executor executor, final SelectorProvider selectorProvider) {
        this(nThreads, executor, selectorProvider, DefaultSelectStrategyFactory.INSTANCE);
    }
    
    public NioEventLoopGroup(final int nThreads, final Executor executor, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory) {
        super(nThreads, executor, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), new Object[] { RejectedExecutionHandlers.reject() });
    }
    
    public NioEventLoopGroup(final int nThreads, final Executor executor, final EventExecutorChooserFactory chooserFactory, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory) {
        super(nThreads, executor, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), chooserFactory, new Object[] { RejectedExecutionHandlers.reject() });
    }
    
    public NioEventLoopGroup(final int nThreads, final Executor executor, final EventExecutorChooserFactory chooserFactory, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory, final RejectedExecutionHandler rejectedExecutionHandler) {
        super(nThreads, executor, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), chooserFactory, new Object[] { rejectedExecutionHandler });
    }
    
    public NioEventLoopGroup(final int nThreads, final Executor executor, final EventExecutorChooserFactory chooserFactory, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory, final RejectedExecutionHandler rejectedExecutionHandler, final EventLoopTaskQueueFactory taskQueueFactory) {
        super(nThreads, executor, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), chooserFactory, new Object[] { rejectedExecutionHandler, taskQueueFactory });
    }
    
    public NioEventLoopGroup(final int nThreads, final Executor executor, final EventExecutorChooserFactory chooserFactory, final SelectorProvider selectorProvider, final SelectStrategyFactory selectStrategyFactory, final RejectedExecutionHandler rejectedExecutionHandler, final EventLoopTaskQueueFactory taskQueueFactory, final EventLoopTaskQueueFactory tailTaskQueueFactory) {
        super(nThreads, executor, NioIoHandler.newFactory(selectorProvider, selectStrategyFactory), chooserFactory, new Object[] { rejectedExecutionHandler, taskQueueFactory, tailTaskQueueFactory });
    }
    
    @Deprecated
    public void setIoRatio(final int ioRatio) {
        NioEventLoopGroup.LOGGER.debug("NioEventLoopGroup.setIoRatio(int) logic was removed, this is a no-op");
    }
    
    public void rebuildSelectors() {
        for (final EventExecutor e : this) {
            ((NioEventLoop)e).rebuildSelector();
        }
    }
    
    @Override
    protected IoEventLoop newChild(final Executor executor, final IoHandlerFactory ioHandlerFactory, final Object... args) {
        final RejectedExecutionHandler rejectedExecutionHandler = (RejectedExecutionHandler)args[0];
        EventLoopTaskQueueFactory taskQueueFactory = null;
        EventLoopTaskQueueFactory tailTaskQueueFactory = null;
        final int argsLength = args.length;
        if (argsLength > 1) {
            taskQueueFactory = (EventLoopTaskQueueFactory)args[1];
        }
        if (argsLength > 2) {
            tailTaskQueueFactory = (EventLoopTaskQueueFactory)args[2];
        }
        return new NioEventLoop(this, executor, ioHandlerFactory, taskQueueFactory, tailTaskQueueFactory, rejectedExecutionHandler);
    }
    
    static {
        LOGGER = InternalLoggerFactory.getInstance(NioEventLoopGroup.class);
    }
}
