Home / Class/ KQueueEventArray Class — netty Architecture

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) {

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