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

package io.netty.util.internal;

import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import io.netty.util.ReferenceCounted;

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