Package org.apache.lucene.util.packed
Class MonotonicBlockPackedWriter
java.lang.Object
org.apache.lucene.util.packed.MonotonicBlockPackedWriter
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)
on4 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 thepacked
deltas from the expected value (computed from the function) using exactly BitsPerValue bits per value.
- See Also:
- NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
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 wrapout
.protected final void
writeValues
(int bitsRequired)
-
Field Details
-
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
Sole constructor.- Parameters:
blockSize
- the number of values of a single block, must be a power of 2
-
-
Method Details
-
add
Append a new long.- Throws:
IOException
-
flush
- Throws:
IOException
-
reset
Reset this writer to wrapout
. The block size remains unchanged. -
finish
Flush all buffered data to disk. This instance is not usable anymore after this method has been called untilreset(DataOutput)
has been called.- Throws:
IOException
-
ord
public long ord()Return the number of values which have been added. -
writeValues
- Throws:
IOException
-