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

package io.netty.util.internal;

import io.netty.util.ReferenceCounted;

public abstract class UnsafeReferenceCountUpdater<T extends ReferenceCounted> extends ReferenceCountUpdater<T>
{
    protected UnsafeReferenceCountUpdater() {
    }
    
    protected abstract long refCntFieldOffset();
    
    @Override
    protected final void safeInitializeRawRefCnt(final T refCntObj, final int value) {
        PlatformDependent.safeConstructPutInt(refCntObj, this.refCntFieldOffset(), value);
    }
    
    @Override
    protected final int getAndAddRawRefCnt(final T refCntObj, final int increment) {
        return PlatformDependent.getAndAddInt(refCntObj, this.refCntFieldOffset(), increment);
    }
    
    @Override
    protected final int getRawRefCnt(final T refCnt) {
        return PlatformDependent.getInt(refCnt, this.refCntFieldOffset());
    }
    
    @Override
    protected final int getAcquireRawRefCnt(final T refCnt) {
        return PlatformDependent.getVolatileInt(refCnt, this.refCntFieldOffset());
    }
    
    @Override
    protected final void setReleaseRawRefCnt(final T refCnt, final int value) {
        PlatformDependent.putOrderedInt(refCnt, this.refCntFieldOffset(), value);
    }
    
    @Override
    protected final boolean casRawRefCnt(final T refCnt, final int expected, final int value) {
        return PlatformDependent.compareAndSwapInt(refCnt, this.refCntFieldOffset(), expected, value);
    }
}
