1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.util.internal;
17
18 import io.netty.util.ReferenceCounted;
19
20 public abstract class UnsafeReferenceCountUpdater<T extends ReferenceCounted> extends ReferenceCountUpdater<T> {
21
22 protected UnsafeReferenceCountUpdater() {
23 }
24
25 protected abstract long refCntFieldOffset();
26
27 @Override
28 protected final void safeInitializeRawRefCnt(T refCntObj, int value) {
29 PlatformDependent.safeConstructPutInt(refCntObj, refCntFieldOffset(), value);
30 }
31
32 @Override
33 protected final int getAndAddRawRefCnt(T refCntObj, int increment) {
34 return PlatformDependent.getAndAddInt(refCntObj, refCntFieldOffset(), increment);
35 }
36
37 @Override
38 protected final int getRawRefCnt(T refCnt) {
39 return PlatformDependent.getInt(refCnt, refCntFieldOffset());
40 }
41
42 @Override
43 protected final int getAcquireRawRefCnt(T refCnt) {
44 return PlatformDependent.getVolatileInt(refCnt, refCntFieldOffset());
45 }
46
47 @Override
48 protected final void setReleaseRawRefCnt(T refCnt, int value) {
49 PlatformDependent.putOrderedInt(refCnt, refCntFieldOffset(), value);
50 }
51
52 @Override
53 protected final boolean casRawRefCnt(T refCnt, int expected, int value) {
54 return PlatformDependent.compareAndSwapInt(refCnt, refCntFieldOffset(), expected, value);
55 }
56 }