KQueueEventArray Class — netty Architecture
Architecture documentation for the KQueueEventArray class in KQueueEventArray.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 43377ca2_4201_bd6f_4ef1_60f1c213f5b8["KQueueEventArray"] 15fe1571_efb0_10ad_d923_798f2d5437b6["KQueueEventArray.java"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|defined in| 15fe1571_efb0_10ad_d923_798f2d5437b6 91072d9b_7340_17f8_b4e7_ff3fab0dc384["KQueueEventArray()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| 91072d9b_7340_17f8_b4e7_ff3fab0dc384 bd9f9cf8_bce0_44d0_2739_c95afb0494e6["memoryAddress()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| bd9f9cf8_bce0_44d0_2739_c95afb0494e6 57b2cf70_a9d8_c3d6_4460_9564d6f78854["capacity()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| 57b2cf70_a9d8_c3d6_4460_9564d6f78854 d02bc962_687b_15d7_d129_66288df1e570["size()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| d02bc962_687b_15d7_d129_66288df1e570 8b52b971_d29f_455c_a241_e9b18cbfd1e0["clear()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| 8b52b971_d29f_455c_a241_e9b18cbfd1e0 995802d7_3ae7_3bb3_7bf1_fbd2a3cfc6bc["evSet()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| 995802d7_3ae7_3bb3_7bf1_fbd2a3cfc6bc a1b74c4f_782b_17ec_ce12_454a1941b54e["reallocIfNeeded()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| a1b74c4f_782b_17ec_ce12_454a1941b54e 12daeba4_d43b_3906_87d8_7fd36d2c180c["realloc()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| 12daeba4_d43b_3906_87d8_7fd36d2c180c 0897250b_c4ea_400e_fdf2_238e0f5e4021["free()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| 0897250b_c4ea_400e_fdf2_238e0f5e4021 97f77989_58a9_eb4d_03d8_a97cc31cf2a0["getKEventOffset()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| 97f77989_58a9_eb4d_03d8_a97cc31cf2a0 db7fb114_2955_31ec_f94f_a86c80d155da["getKEventOffsetAddress()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| db7fb114_2955_31ec_f94f_a86c80d155da 01f01e26_4daa_a49e_d68b_766de315fc6a["getShort()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| 01f01e26_4daa_a49e_d68b_766de315fc6a aa710ee4_db8f_5708_66f3_597ef3e7a95e["flags()"] 43377ca2_4201_bd6f_4ef1_60f1c213f5b8 -->|method| aa710ee4_db8f_5708_66f3_597ef3e7a95e
Relationship Graph
Source Code
transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/KQueueEventArray.java lines 38–190
final class KQueueEventArray {
private static final int KQUEUE_EVENT_SIZE = Native.sizeofKEvent();
private static final int KQUEUE_IDENT_OFFSET = Native.offsetofKEventIdent();
private static final int KQUEUE_FILTER_OFFSET = Native.offsetofKEventFilter();
private static final int KQUEUE_FFLAGS_OFFSET = Native.offsetofKEventFFlags();
private static final int KQUEUE_FLAGS_OFFSET = Native.offsetofKEventFlags();
private static final int KQUEUE_DATA_OFFSET = Native.offsetofKeventData();
private static final int KQUEUE_UDATA_OFFSET = Native.offsetofKeventUdata();
private CleanableDirectBuffer memoryCleanable;
private ByteBuffer memory;
private long memoryAddress;
private int size;
private int capacity;
KQueueEventArray(int capacity) {
if (capacity < 1) {
throw new IllegalArgumentException("capacity must be >= 1 but was " + capacity);
}
memoryCleanable = Buffer.allocateDirectBufferWithNativeOrder(calculateBufferCapacity(capacity));
memory = memoryCleanable.buffer();
memoryAddress = Buffer.memoryAddress(memory);
this.capacity = capacity;
}
/**
* Return the {@code memoryAddress} which points to the start of this {@link KQueueEventArray}.
*/
long memoryAddress() {
return memoryAddress;
}
/**
* Return the capacity of the {@link KQueueEventArray} which represent the maximum number of {@code kevent}s
* that can be stored in it.
*/
int capacity() {
return capacity;
}
int size() {
return size;
}
void clear() {
size = 0;
}
void evSet(int ident, short filter, short flags, int fflags, long data, long udata) {
reallocIfNeeded();
evSet(getKEventOffset(size++) + memoryAddress, ident, filter, flags, fflags, data, udata);
}
private void reallocIfNeeded() {
if (size == capacity) {
realloc(true);
}
}
/**
* Increase the storage of this {@link KQueueEventArray}.
*/
void realloc(boolean throwIfFail) {
// Double the capacity while it is "sufficiently small", and otherwise increase by 50%.
int newLength = capacity <= 65536 ? capacity << 1 : capacity + capacity >> 1;
try {
int newCapacity = calculateBufferCapacity(newLength);
CleanableDirectBuffer buffer = Buffer.allocateDirectBufferWithNativeOrder(newCapacity);
// Copy over the old content of the memory and reset the position as we always act on the buffer as if
// the position was never increased.
memory.position(0).limit(size);
buffer.buffer().put(memory);
buffer.buffer().position(0);
memoryCleanable.clean();
memoryCleanable = buffer;
memory = buffer.buffer();
memoryAddress = Buffer.memoryAddress(memory);
} catch (OutOfMemoryError e) {
if (throwIfFail) {
Source
Frequently Asked Questions
What is the KQueueEventArray class?
KQueueEventArray is a class in the netty codebase, defined in transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/KQueueEventArray.java.
Where is KQueueEventArray defined?
KQueueEventArray is defined in transport-classes-kqueue/src/main/java/io/netty/channel/kqueue/KQueueEventArray.java at line 38.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free