java.lang.Object
me.lemire.integercompression.Simple16
- All Implemented Interfaces:
IntegerCODEC,SkippableIntegerCODEC
This is an implementation of the popular Simple16 scheme. It is limited to
28-bit integers (between 0 and 2^28-1).
Note that this does not use differential coding: if you are working on sorted
lists, you must compute the deltas separately.
Adapted by D. Lemire from the Apache Lucene project.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidcompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) Compress data from an array to another array.static final intcompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) Compress an integer array using Simple16static final intdecompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) Decompress an integer array using Simple16voidheadlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) Compress data from an array to another array.voidheadlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) 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.toString()static voiduncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) Uncompress data from an array to another array.voiduncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) Uncompress data from an array to another array.
-
Constructor Details
-
Simple16
public Simple16()
-
-
Method Details
-
headlessCompress
public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) Description copied from interface:SkippableIntegerCODECCompress 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. Implementation note: contrary toIntegerCODEC.compress(int[], me.lemire.integercompression.IntWrapper, int, int[], me.lemire.integercompression.IntWrapper), this may skip writing information about the number of encoded integers.- Specified by:
headlessCompressin interfaceSkippableIntegerCODEC- Parameters:
in- input arrayinpos- where to start reading in the arrayinlength- how many integers to compressout- output arrayoutpos- where to write in the output array
-
compressblock
public static final int compressblock(int[] out, int outOffset, int[] in, int inOffset, int n) Compress an integer array using Simple16- Parameters:
out- the compressed outputoutOffset- the offset of the output in the number of integersin- the integer input arrayinOffset- the offset of the input in the number of integersn- the number of elements to be compressed- Returns:
- the number of compressed integers
-
decompressblock
public static final int decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n) Decompress an integer array using Simple16- Parameters:
out- the decompressed outputoutOffset- the offset of the output in the number of integersin- the compressed input arrayinOffset- the offset of the input in the number of integersn- the number of elements to be compressed- Returns:
- the number of processed integers
-
headlessUncompress
public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) Description copied from interface:SkippableIntegerCODECUncompress data from an array to another array. Both inpos and outpos parameters are modified to indicate new positions after read/write.- Specified by:
headlessUncompressin interfaceSkippableIntegerCODEC- 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 uncompressed outputoutpos- where to start writing the uncompressed output in outnum- number of integers we want to decode. May be less than the actual number of compressed integers
-
maxHeadlessCompressedLength
Description copied from interface:SkippableIntegerCODECCompute 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
SkippableIntegerCODEC.headlessCompress(int[], IntWrapper, int, int[], IntWrapper).- Specified by:
maxHeadlessCompressedLengthin interfaceSkippableIntegerCODEC- 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
-
uncompress
public static void uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) 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 formtmpinpos- where to start reading in the arrayinlength- length of the compressed data (ignored by some schemes)out- array where to write the compressed outputcurrentPos- where to write the compressed output in outoutlength- number of integers we want to decode
-
compress
Description copied from interface:IntegerCODECCompress 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.- Specified by:
compressin interfaceIntegerCODEC- Parameters:
in- input arrayinpos- where to start reading in the arrayinlength- how many integers to compressout- output arrayoutpos- where to write in the output array
-
uncompress
Description copied from interface:IntegerCODECUncompress data from an array to another array. Both inpos and outpos parameters are modified to indicate new positions after read/write.- Specified by:
uncompressin interfaceIntegerCODEC- 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 start writing the uncompressed output in out
-
toString
-