View Javadoc
1   /*
2    * Copyright 2025 The Netty Project
3    *
4    * The Netty Project licenses this file to you under the Apache License,
5    * version 2.0 (the "License"); you may not use this file except in compliance
6    * with the License. You may obtain a copy of the License at:
7    *
8    *   https://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations
14   * under the License.
15   */
16  package io.netty.channel.uring;
17  
18  import io.netty.buffer.ByteBuf;
19  
20  import java.util.function.Consumer;
21  
22  /**
23   * Allocator that is responsible to allocate buffers for a buffer ring.
24   */
25  public interface IoUringBufferRingAllocator {
26  
27      /**
28       * Creates a new receive buffer to use by the buffer ring. The returned {@link ByteBuf} must be direct.
29       */
30      ByteBuf allocate();
31  
32      /**
33       * Set the bytes that have been read for the last read operation that was full-filled out of the buffer ring.
34       *
35       * @param attempted  the attempted bytes to read.
36       * @param actual     the number of bytes that could be read.
37       */
38      void lastBytesRead(int attempted, int actual);
39  
40      /**
41       * Fill in {@code num} of {@link ByteBuf}s.
42       * <strong>Important:</strong> The {@link Consumer} MUST not escape this method.
43       *
44       * @param consumer  the {@link Consumer} that will consume the buffers.
45       * @param num       the number of buffers that are passed to {@link Consumer#accept(Object)}.
46       */
47      default void allocateBatch(Consumer<ByteBuf> consumer, int num) {
48          for (int i = 0; i < num; i++) {
49              consumer.accept(allocate());
50          }
51      }
52  }