/**
* 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);
}