Class SkippableLongComposition

java.lang.Object
me.lemire.longcompression.SkippableLongComposition
All Implemented Interfaces:
SkippableLongCODEC

public class SkippableLongComposition extends Object implements SkippableLongCODEC
Helper class to compose schemes.
Author:
Benoit Lacelle
  • Constructor Details

    • SkippableLongComposition

      public SkippableLongComposition(SkippableLongCODEC f1, SkippableLongCODEC f2)
      Compose a scheme from a first one (f1) and a second one (f2). The first one is called first and then the second one tries to compress whatever remains from the first run. By convention, the first scheme should be such that if, during decoding, a 32-bit zero is first encountered, then there is no output.
      Parameters:
      f1 - first codec
      f2 - second codec
  • Method Details

    • headlessCompress

      public void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos)
      Description copied from interface: SkippableLongCODEC
      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 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:
      headlessCompress in interface SkippableLongCODEC
      Parameters:
      in - input array
      inpos - where to start reading in the array
      inlength - how many longs to compress
      out - output array
      outpos - where to write in the output array
    • headlessUncompress

      public void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos, int num)
      Description copied from interface: SkippableLongCODEC
      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 interface SkippableLongCODEC
      Parameters:
      in - array containing data in compressed form
      inpos - where to start reading in the array
      inlength - length of the compressed data (ignored by some schemes)
      out - array where to write the uncompressed output
      outpos - where to start writing the uncompressed output in out
      num - number of longs we want to decode, the actual number of longs decoded can be less
    • maxHeadlessCompressedLength

      public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength)
      Description copied from interface: SkippableLongCODEC
      Compute 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:
      maxHeadlessCompressedLength in interface SkippableLongCODEC
      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

      public String toString()
      Overrides:
      toString in class Object