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

package com.hypixel.hytale.server.worldgen.util;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.function.Supplier;
import javax.annotation.Nonnull;
import java.util.concurrent.BlockingQueue;
import java.util.function.Function;

public class ObjectPool<T extends Function<T, T>> implements Function<T, T>
{
    @Nonnull
    private final BlockingQueue<T> items;
    private final Supplier<T> supplier;
    
    public ObjectPool(final int size, final Supplier<T> supplier) {
        this.items = new ArrayBlockingQueue<T>(size);
        this.supplier = supplier;
    }
    
    public T acquire() {
        final T v = this.items.poll();
        if (v == null) {
            return this.supplier.get();
        }
        return v;
    }
    
    public <K extends T> void recycle(@Nonnull final K v) {
        this.items.offer(v);
    }
    
    public int size() {
        return this.items.size();
    }
    
    @Override
    public T apply(final T cachedKey) {
        return (T)this.acquire().apply((Function<Function<Function<T, T>, Function<T, T>>, Function<Function<T, T>, Function<T, T>>>)cachedKey);
    }
}
