Module me.lemire.integercompression
Interface SkippableIntegratedIntegerCODEC
- All Known Implementing Classes:
IntegratedBinaryPacking,IntegratedVariableByte,SkippableIntegratedComposition
public interface SkippableIntegratedIntegerCODEC
Interface describing a standard CODEC to compress integers. This is a
variation on the IntegerCODEC interface meant to be used for random access
and with integrated differential coding
(i.e., given a large array, you can segment it and decode just the subarray you need).
The main differences are that we must specify the number of integers we wish to
decode as well as the initial value (for differential coding). This information
might be stored elsewhere.
- Author:
- Daniel Lemire
-
Method Summary
Modifier and TypeMethodDescriptionvoidheadlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, IntWrapper initvalue) Compress data from an array to another array.voidheadlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num, IntWrapper initvalue) Uncompress data from an array to another array.intmaxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) Compute the maximum number of integers that might be required to store the compressed form of a given input array segment, without headers.
-
Method Details
-
headlessCompress
void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, IntWrapper initvalue) Compress data from an array to another array. Both inpos and outpos are modified to represent how much data was read and written to if 12 ints (inlength = 12) are compressed to 3 ints, then inpos will be incremented by 12 while outpos will be incremented by 3 we use IntWrapper to pass the values by reference.- Parameters:
in- input arrayinpos- location in the input arrayinlength- how many integers to compressout- output arrayoutpos- where to write in the output arrayinitvalue- initial value for the purpose of differential coding, the value is automatically updated
-
headlessUncompress
void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num, IntWrapper initvalue) Uncompress data from an array to another array. Both inpos and outpos parameters are modified to indicate new positions after read/write.- Parameters:
in- array containing data in compressed forminpos- where to start reading in the arrayinlength- length of the compressed data (ignored by some schemes)out- array where to write the compressed outputoutpos- where to write the compressed output in outnum- number of integers we want to decode, the actual number of integers decoded can be lessinitvalue- initial value for the purpose of differential coding, the value is automatically updated
-
maxHeadlessCompressedLength
Compute the maximum number of integers that might be required to store the compressed form of a given input array segment, without headers.This is useful to pre-allocate the output buffer before calling
headlessCompress(int[], IntWrapper, int, int[], IntWrapper, IntWrapper).- Parameters:
compressedPositions- since not all schemes compress every input integer, this parameter returns how many input integers will actually be compressed. This is useful when composing multiple schemes.inlength- number of integers to be compressed- Returns:
- the maximum number of integers needed in the output array
-