Package me.lemire.integercompression
Class Simple16
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 TypeMethodDescriptionvoid
compress
(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) Compress data from an array to another array.static final int
compressblock
(int[] out, int outOffset, int[] in, int inOffset, int n) Compress an integer array using Simple16static final int
decompressblock
(int[] out, int outOffset, int[] in, int inOffset, int n) Decompress an integer array using Simple16void
headlessCompress
(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) Compress data from an array to another array.void
headlessUncompress
(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num) Uncompress data from an array to another array.toString()
static void
uncompress
(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength) Uncompress data from an array to another array.void
uncompress
(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:SkippableIntegerCODEC
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. 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:
headlessCompress
in 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:SkippableIntegerCODEC
Uncompress data from an array to another array. Both inpos and outpos parameters are modified to indicate new positions after read/write.- Specified by:
headlessUncompress
in 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
-
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:IntegerCODEC
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.- Specified by:
compress
in 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:IntegerCODEC
Uncompress data from an array to another array. Both inpos and outpos parameters are modified to indicate new positions after read/write.- Specified by:
uncompress
in 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
-