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 final 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 final int`
`INT_BLOCK_MASK`
`static final int`
`INT_BLOCK_SHIFT`
`static final 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

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 Details

### 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 Details

### 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 Details

### 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.