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

package io.netty.util.internal;

import java.lang.invoke.VarHandle;
import io.netty.util.ReferenceCounted;

public abstract class VarHandleReferenceCountUpdater<T extends ReferenceCounted> extends ReferenceCountUpdater<T>
{
    protected VarHandleReferenceCountUpdater() {
    }
    
    protected abstract VarHandle varHandle();
    
    @Override
    protected final void safeInitializeRawRefCnt(final T refCntObj, final int value) {
        this.varHandle().set((ReferenceCounted)refCntObj, value);
    }
    
    @Override
    protected final int getAndAddRawRefCnt(final T refCntObj, final int increment) {
        return this.varHandle().getAndAdd((ReferenceCounted)refCntObj, increment);
    }
    
    @Override
    protected final int getRawRefCnt(final T refCnt) {
        return this.varHandle().get((ReferenceCounted)refCnt);
    }
    
    @Override
    protected final int getAcquireRawRefCnt(final T refCnt) {
        return this.varHandle().getAcquire((ReferenceCounted)refCnt);
    }
    
    @Override
    protected final void setReleaseRawRefCnt(final T refCnt, final int value) {
        this.varHandle().setRelease((ReferenceCounted)refCnt, value);
    }
    
    @Override
    protected final boolean casRawRefCnt(final T refCnt, final int expected, final int value) {
        return this.varHandle().compareAndSet((ReferenceCounted)refCnt, expected, value);
    }
}
