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 import java.lang.invoke.VarHandle;
20
21 public abstract class VarHandleReferenceCountUpdater<T extends ReferenceCounted>
22 extends ReferenceCountUpdater<T> {
23
24 protected VarHandleReferenceCountUpdater() {
25 }
26
27 protected abstract VarHandle varHandle();
28
29 @Override
30 protected final void safeInitializeRawRefCnt(T refCntObj, int value) {
31 varHandle().set(refCntObj, value);
32 }
33
34 @Override
35 protected final int getAndAddRawRefCnt(T refCntObj, int increment) {
36 return (int) varHandle().getAndAdd(refCntObj, increment);
37 }
38
39 @Override
40 protected final int getRawRefCnt(T refCnt) {
41 return (int) varHandle().get(refCnt);
42 }
43
44 @Override
45 protected final int getAcquireRawRefCnt(T refCnt) {
46 return (int) varHandle().getAcquire(refCnt);
47 }
48
49 @Override
50 protected final void setReleaseRawRefCnt(T refCnt, int value) {
51 varHandle().setRelease(refCnt, value);
52 }
53
54 @Override
55 protected final boolean casRawRefCnt(T refCnt, int expected, int value) {
56 return varHandle().compareAndSet(refCnt, expected, value);
57 }
58 }