Package me.lemire.integercompression
Class OptPFD
java.lang.Object
me.lemire.integercompression.OptPFD
- All Implemented Interfaces:
IntegerCODEC
,SkippableIntegerCODEC
OptPFD: fast patching scheme by Yan et al.
Follows:
H. Yan, S. Ding, T. Suel, Inverted index compression and query processing with optimized document ordering, in: WWW 09, 2009, pp. 401-410.
using Simple16 as the secondary coder. It encodes integers in blocks of 128 integers. For arrays containing an arbitrary number of integers, you should use it in conjunction with another CODEC:IntegerCODEC ic = new Composition(new OptPFD(), new VariableByte()).Note that this does not use differential coding: if you are working on sorted lists, you must compute the deltas separately. (Yes, this is true even though the "D" at the end of the name probably stands for delta.) For multi-threaded applications, each thread should use its own OptPFD object.
- Author:
- Daniel Lemire
-
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.void
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 mynvalue) Uncompress data from an array to another array.toString()
void
uncompress
(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos) Uncompress data from an array to another array.
-
Constructor Details
-
OptPFD
public OptPFD()Constructor for the OptPFD CODEC.
-
-
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
-
headlessUncompress
public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int mynvalue) 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 outmynvalue
- number of integers we want to decode. May be less than the actual number of compressed integers
-
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
-