// Path: src/main/java/com/lmax/tool/disruptor/BatchSizeListener.java
// public interface BatchSizeListener
// {
// 
//     /**
//      * Will be called at the end of a Disruptor batch
//      * @param batchSize  The size of the batch
//      */
//     void onEndOfBatch(int batchSize);
// 
// }
// 
// Path: src/main/java/com/lmax/tool/disruptor/ProxyMethodInvocation.java
// public final class ProxyMethodInvocation
// {
//     private Invoker invoker;
//     private Resetable argumentHolder;
// 
//     public Invoker getInvoker()
//     {
//         return invoker;
//     }
// 
//     public void setInvoker(final Invoker invoker)
//     {
//         this.invoker = invoker;
//     }
// 
//     public void setArgumentHolder(final Resetable argumentHolder)
//     {
//         this.argumentHolder = argumentHolder;
//     }
// 
//     public Object getArgumentHolder()
//     {
//         return argumentHolder;
//     }
// 
//     public void reset()
//     {
//         argumentHolder.reset();
//     }
// }


import com.lmax.disruptor.EventHandler;
import com.lmax.tool.disruptor.BatchSizeListener;
import com.lmax.tool.disruptor.ProxyMethodInvocation;
package com.lmax.tool.disruptor.handlers;


class BatchSizeReportingEventHandler implements EventHandler<ProxyMethodInvocation>
{
    private final EventHandler<ProxyMethodInvocation> delegate;
    private final BatchSizeListener batchSizeListener;

    private int batchCounter;

// Path: src/main/java/com/lmax/tool/disruptor/BatchSizeListener.java
// public interface BatchSizeListener
// {
// 
//     /**
//      * Will be called at the end of a Disruptor batch
//      * @param batchSize  The size of the batch
//      */
//     void onEndOfBatch(int batchSize);
// 
// }
// 
// Path: src/main/java/com/lmax/tool/disruptor/ProxyMethodInvocation.java
// public final class ProxyMethodInvocation
// {
//     private Invoker invoker;
//     private Resetable argumentHolder;
// 
//     public Invoker getInvoker()
//     {
//         return invoker;
//     }
// 
//     public void setInvoker(final Invoker invoker)
//     {
//         this.invoker = invoker;
//     }
// 
//     public void setArgumentHolder(final Resetable argumentHolder)
//     {
//         this.argumentHolder = argumentHolder;
//     }
// 
//     public Object getArgumentHolder()
//     {
//         return argumentHolder;
//     }
// 
//     public void reset()
//     {
//         argumentHolder.reset();
//     }
// }


// Path: src/main/java/com/lmax/tool/disruptor/handlers/BatchSizeReportingEventHandler.java
import com.lmax.disruptor.EventHandler;
import com.lmax.tool.disruptor.BatchSizeListener;
import com.lmax.tool.disruptor.ProxyMethodInvocation;

package com.lmax.tool.disruptor.handlers;


class BatchSizeReportingEventHandler implements EventHandler<ProxyMethodInvocation>
{
    private final EventHandler<ProxyMethodInvocation> delegate;
    private final BatchSizeListener batchSizeListener;

    private int batchCounter;

    BatchSizeReportingEventHandler(final BatchSizeListener batchSizeListener, final EventHandler<ProxyMethodInvocation> delegate)