java.lang.Object
me.lemire.longcompression.LongBinaryPacking
- All Implemented Interfaces:
LongCODEC,SkippableLongCODEC
Scheme based on a commonly used idea: can be extremely fast.
It encodes integers in blocks of 64 longs. For arrays containing
an arbitrary number of longs, you should use it in conjunction
with another CODEC:
LongCODEC ic = new Composition(new LongBinaryPacking(), new LongVariableByte()).Note that this does not use differential coding: if you are working on sorted lists, you must compute the deltas separately.
For details, please see BinaryPacking
- Author:
- Benoit Lacelle
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidcompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) Compress data from an array to another array.voidheadlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) Compress data from an array to another array.voidheadlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos, int num) Uncompress data from an array to another array.intmaxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength) Compute the maximum number of longs that might be required to store the compressed form of a given input array segment, without headers.toString()voiduncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) Uncompress data from an array to another array.
-
Field Details
-
BLOCK_SIZE
public static final int BLOCK_SIZE- See Also:
-
-
Constructor Details
-
LongBinaryPacking
public LongBinaryPacking()
-
-
Method Details
-
compress
Description copied from interface:LongCODECCompress 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 longs (inlength = 12) are compressed to 3 longs, then inpos will be incremented by 12 while outpos will be incremented by 3. We use IntWrapper to pass the values by reference. -
headlessCompress
public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos) Description copied from interface:SkippableLongCODECCompress 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 longs (inlength = 12) are compressed to 3 longs, 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:
headlessCompressin interfaceSkippableLongCODEC- Parameters:
in- input arrayinpos- where to start reading in the arrayinlength- how many longs to compressout- output arrayoutpos- where to write in the output array
-
uncompress
Description copied from interface:LongCODECUncompress data from an array to another array. Both inpos and outpos parameters are modified to indicate new positions after read/write.- Specified by:
uncompressin interfaceLongCODEC- 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 out
-
headlessUncompress
public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos, int num) Description copied from interface:SkippableLongCODECUncompress data from an array to another array. Both inpos and outpos parameters are modified to indicate new positions after read/write.- Specified by:
headlessUncompressin interfaceSkippableLongCODEC- 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 longs we want to decode, the actual number of longs decoded can be less
-
maxHeadlessCompressedLength
Description copied from interface:SkippableLongCODECCompute the maximum number of longs 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
SkippableLongCODEC.headlessCompress(long[], IntWrapper, int, long[], IntWrapper).- Specified by:
maxHeadlessCompressedLengthin interfaceSkippableLongCODEC- 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 longs to be compressed- Returns:
- the maximum number of longs needed in the output array
-
toString
-