1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.channel.uring;
17
18 import java.util.Arrays;
19
20 final class MsgHdrMemoryArray {
21 static final long NO_ID = 0;
22
23 private final MsgHdrMemory[] hdrs;
24 private final int capacity;
25 private final long[] ids;
26 private boolean released;
27 private int idx;
28
29 MsgHdrMemoryArray(short capacity) {
30 assert capacity >= 0;
31 this.capacity = capacity;
32 hdrs = new MsgHdrMemory[capacity];
33 ids = new long[capacity];
34 for (int i = 0; i < hdrs.length; i++) {
35 hdrs[i] = new MsgHdrMemory((short) i);
36 ids[i] = NO_ID;
37 }
38 }
39
40 MsgHdrMemory nextHdr() {
41 if (idx == hdrs.length) {
42 return null;
43 }
44 return hdrs[idx++];
45 }
46
47 void restoreNextHdr(MsgHdrMemory hdr) {
48 assert hdr.idx() == idx - 1;
49 idx--;
50 }
51
52 MsgHdrMemory hdr(int idx) {
53 return hdrs[idx];
54 }
55
56 long id(int idx) {
57 return ids[idx];
58 }
59
60 void setId(int idx, long id) {
61 ids[idx] = id;
62 }
63
64 void clear() {
65 Arrays.fill(ids, 0, idx, NO_ID);
66 idx = 0;
67 }
68
69 int length() {
70 return idx;
71 }
72
73 void release() {
74 assert !released;
75 released = true;
76 for (MsgHdrMemory hdr: hdrs) {
77 hdr.release();
78 }
79 }
80
81 int capacity() {
82 return capacity;
83 }
84 }