me.lemire.integercompression.differential.SkippableIntegratedIntegerCODEC Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of JavaFastPFOR Show documentation
Show all versions of JavaFastPFOR Show documentation
It is a library to compress and uncompress arrays of integers
very fast. The assumption is that most (but not all) values in
your array use less than 32 bits.
/**
* This is code is released under the
* Apache License Version 2.0 http://www.apache.org/licenses/.
*
* (c) Daniel Lemire, http://lemire.me/en/
*/
package me.lemire.integercompression.differential;
import me.lemire.integercompression.IntWrapper;
/**
* 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
*
*/
public interface SkippableIntegratedIntegerCODEC {
/**
* 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.
*
* @param in
* input array
* @param inpos
* location in the input array
* @param inlength
* how many integers to compress
* @param out
* output array
* @param outpos
* where to write in the output array
* @param initvalue initial value for the purpose of differential coding, the value is automatically updated
*/
public void headlessCompress(int[] in, IntWrapper inpos, int inlength, int[] out,
IntWrapper outpos, IntWrapper initvalue);
/**
* Uncompress data from an array to another array.
*
* Both inpos and outpos parameters are modified to indicate new positions
* after read/write.
*
* @param in
* array containing data in compressed form
* @param inpos
* where to start reading in the array
* @param inlength
* length of the compressed data (ignored by some schemes)
* @param out
* array where to write the compressed output
* @param outpos
* where to write the compressed output in out
* @param num
* number of integers we want to decode, the actual number of integers decoded can be less
* @param initvalue initial value for the purpose of differential coding, the value is automatically updated
*/
public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out,
IntWrapper outpos, int num, IntWrapper initvalue);
}