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. Each block has an overhead between 6 and 14 bytes.
Format:
- <BLock>BlockCount
- BlockCount: ⌈ ValueCount / BlockSize ⌉
- Block: <Header, (Ints)>
- Header: <B, A, BitsPerValue>
- B: the B from f: x → A × x + B using a
variable-length long - 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 the
zigzag-encoded
packeddeltas from the expected value (computed from the function) using exaclty BitsPerValue bits per value
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidadd(long l) Append a new long.voidfinish()Flush all buffered data to disk.longord()Return the number of values which have been added.voidreset(DataOutput out) Reset this writer to wrapout.
-
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
-
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.
-