Module me.lemire.integercompression
Class IntegratedVariableByte
java.lang.Object
me.lemire.integercompression.differential.IntegratedVariableByte
- All Implemented Interfaces:
ByteIntegerCODEC,IntegratedByteIntegerCODEC,IntegratedIntegerCODEC,SkippableIntegratedIntegerCODEC,IntegerCODEC
public class IntegratedVariableByte
extends Object
implements IntegratedIntegerCODEC, IntegratedByteIntegerCODEC, SkippableIntegratedIntegerCODEC
Implementation of variable-byte with differential coding. For best
performance, use it using the IntegratedByteIntegerCODEC interface.
You should only use this scheme on sorted arrays. Use VariableByte if you
have unsorted arrays.
- Author:
- Daniel Lemire
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidcompress(int[] in, IntWrapper inpos, int inlength, byte[] out, IntWrapper outpos) Compress data from an array to another array.voidcompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) Compress data from an array to another array.voidheadlessCompress(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.protected ByteBuffermakeBuffer(int sizeInBytes) Creates a new buffer of the requested size.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()voiduncompress(byte[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) 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
-
IntegratedVariableByte
public IntegratedVariableByte()
-
-
Method Details
-
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
-
compress
Description copied from interface:ByteIntegerCODECCompress 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 bytes, 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 interfaceByteIntegerCODEC- Parameters:
in- input arrayinpos- location in the input 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
-
uncompress
Description copied from interface:ByteIntegerCODECUncompress data from an array to another array. Both inpos and outpos parameters are modified to indicate new positions after read/write.- Specified by:
uncompressin interfaceByteIntegerCODEC- 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 out
-
toString
-
headlessCompress
public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, IntWrapper initvalue) Description copied from interface:SkippableIntegratedIntegerCODECCompress 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:
headlessCompressin interfaceSkippableIntegratedIntegerCODEC- 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
public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num, IntWrapper initvalue) Description copied from interface:SkippableIntegratedIntegerCODECUncompress data from an array to another array. Both inpos and outpos parameters are modified to indicate new positions after read/write.- Specified by:
headlessUncompressin interfaceSkippableIntegratedIntegerCODEC- 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
Description copied from interface:SkippableIntegratedIntegerCODECCompute 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
SkippableIntegratedIntegerCODEC.headlessCompress(int[], IntWrapper, int, int[], IntWrapper, IntWrapper).- Specified by:
maxHeadlessCompressedLengthin interfaceSkippableIntegratedIntegerCODEC- 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
-
makeBuffer
Creates a new buffer of the requested size. In case you need a different way to allocate buffers, you can override this method with a custom behavior. The default implementation allocates a new Java directByteBufferon each invocation.
-