Package org.apache.lucene.util.packed

# Class MonotonicBlockPackedWriter

java.lang.Object
org.apache.lucene.util.packed.MonotonicBlockPackedWriter

public final class MonotonicBlockPackedWriter extends Object
A writer for large monotonically increasing sequences of positive longs.

The sequence is divided into fixed-size blocks and for each block, values are modeled after a linear function f: x → A × x + B. The block encodes deltas from the expected values computed from this function using as few bits as possible.

Format:

- <BLock>BlockCount
- BlockCount: ⌈ ValueCount / BlockSize ⌉
- Block: <Header, (Ints)>
- Header: <B, A, BitsPerValue>
- B: the B from f: x → A × x + B using a `zig-zag encoded` `vLong`
- A: the A from f: x → A × x + B encoded using `Float.floatToIntBits(float)` on `4 bytes`
- BitsPerValue: a `variable-length int`
- Ints: if BitsPerValue is `0`, then there is nothing to read and all values perfectly match the result of the function. Otherwise, these are the `packed` deltas from the expected value (computed from the function) using exactly BitsPerValue bits per value.

See Also:
  - `MonotonicBlockPackedReader`
NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected byte[]`
`blocks`
`protected boolean`
`finished`
`protected int`
`off`
`protected long`
`ord`
`protected DataOutput`
`out`
`protected final long[]`
`values`

## Constructor Summary

Constructors
Constructor
Description
`MonotonicBlockPackedWriter(DataOutput out, int blockSize)`
Sole constructor.

## Method Summary

Modifier and Type
Method
Description
`void`
`add(long l)`
Append a new long.
`void`
`finish()`
Flush all buffered data to disk.
`protected void`
`flush()`
`long`
`ord()`
Return the number of values which have been added.
`void`
`reset(DataOutput out)`
Reset this writer to wrap `out`.
`protected final void`
`writeValues(int bitsRequired)`

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

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

## Field Details

### out

protected DataOutput out

### values

protected final long[] values

### blocks

protected byte[] blocks

### off

protected int off

### ord

protected long ord

### finished

protected boolean finished

## Constructor Details

### MonotonicBlockPackedWriter

public MonotonicBlockPackedWriter(DataOutput out, int blockSize)
Sole constructor.

Parameters:
  `blockSize` - the number of values of a single block, must be a power of 2

## Method Details

### add

public void add(long l) throws IOException
Append a new long.

Throws:
  `IOException`

### flush

protected void flush() throws IOException

Throws:
  `IOException`

### reset

public void reset(DataOutput out)
Reset this writer to wrap `out`. The block size remains unchanged.

### finish

public void finish() throws IOException
Flush all buffered data to disk. This instance is not usable anymore after this method has been called until `reset(DataOutput)` has been called.

Throws:
  `IOException`

### ord

public long ord()
Return the number of values which have been added.

### writeValues

protected final void writeValues(int bitsRequired) throws IOException

Throws:
  `IOException`