Package org.apache.lucene.util

## Class IntBlockPool

- java.lang.Object
- - org.apache.lucene.util.IntBlockPool

-     public class IntBlockPool
      extends Object

  A pool for int blocks similar to `ByteBlockPool`
  NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `IntBlockPool.Allocator` | Abstract class for allocating and freeing int blocks.
    `static class` | `IntBlockPool.DirectAllocator` | A simple `IntBlockPool.Allocator` that never recycles.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `int[]` | `buffer` | Current head buffer
    `int[][]` | `buffers` | array of buffers currently used in the pool.
    `static int` | `INT_BLOCK_MASK` |
    `static int` | `INT_BLOCK_SHIFT` |
    `static int` | `INT_BLOCK_SIZE` |
    `int` | `intOffset` | Current head offset
    `int` | `intUpto` | Pointer to the current position in head buffer

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `IntBlockPool()` | Creates a new `IntBlockPool` with a default `IntBlockPool.Allocator`.
    `IntBlockPool​(IntBlockPool.Allocator allocator)` | Creates a new `IntBlockPool` with the given `IntBlockPool.Allocator`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `nextBuffer()` | Advances the pool to its next buffer.
    `void` | `reset​(boolean zeroFillBuffers, boolean reuseFirst)` | Expert: Resets the pool to its initial state, while optionally reusing the first buffer.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### INT_BLOCK_SHIFT

          public static final int INT_BLOCK_SHIFT

      See Also:
        Constant Field Values

    - #### INT_BLOCK_SIZE

          public static final int INT_BLOCK_SIZE

      See Also:
        Constant Field Values

    - #### INT_BLOCK_MASK

          public static final int INT_BLOCK_MASK

      See Also:
        Constant Field Values

    - #### buffers

          public int[][] buffers

      array of buffers currently used in the pool. Buffers are allocated if needed don't modify this outside of this class

    - #### intUpto

          public int intUpto

      Pointer to the current position in head buffer

    - #### buffer

          public int[] buffer

      Current head buffer

    - #### intOffset

          public int intOffset

      Current head offset

  - ### Constructor Detail

    - #### IntBlockPool

          public IntBlockPool()

      Creates a new `IntBlockPool` with a default `IntBlockPool.Allocator`.
      See Also:
        `nextBuffer()`

    - #### IntBlockPool

          public IntBlockPool​(IntBlockPool.Allocator allocator)

      Creates a new `IntBlockPool` with the given `IntBlockPool.Allocator`.
      See Also:
        `nextBuffer()`

  - ### Method Detail

    - #### reset

          public void reset​(boolean zeroFillBuffers,
                            boolean reuseFirst)

      Expert: Resets the pool to its initial state, while optionally reusing the first buffer. Buffers that are not reused are reclaimed by `ByteBlockPool.Allocator.recycleByteBlocks(byte[][], int, int)`. Buffers can be filled with zeros before recycling them. This is useful if a slice pool works on top of this int pool and relies on the buffers being filled with zeros to find the non-zero end of slices.
      Parameters:
        `zeroFillBuffers` - if `true` the buffers are filled with `0`.
        `reuseFirst` - if `true` the first buffer will be reused and calling `nextBuffer()` is not needed after reset iff the block pool was used before ie. `nextBuffer()` was called before.

    - #### nextBuffer

          public void nextBuffer()

      Advances the pool to its next buffer. This method should be called once after the constructor to initialize the pool. In contrast to the constructor a `reset(boolean, boolean)` call will advance the pool to its first buffer immediately.