Interface SkippableLongCODEC

All Known Implementing Classes:
LongBinaryPacking, LongJustCopy, LongVariableByte, SkippableLongComposition

public interface SkippableLongCODEC
Interface describing a standard CODEC to compress longs. This is a variation on the LongCODEC interface meant to be used for random access (i.e., given a large array, you can segment it and decode just the subarray you need). The main difference is that we must specify the number of longs we wish to decode. This information should be stored elsewhere. This interface was designed by the Terrier team for their search engine.
Author:
Benoit Lacelle
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos)
    Compress data from an array to another array.
    void
    headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos, int num)
    Uncompress data from an array to another array.
    int
    maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength)
    Compute the maximum number of longs that might be required to store the compressed form of a given input array segment, without headers.
  • Method Details

    • headlessCompress

      void headlessCompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos)
      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.
      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

      void headlessUncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos, int num)
      Uncompress data from an array to another array. Both inpos and outpos parameters are modified to indicate new positions after read/write.
      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

      int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength)
      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 headlessCompress(long[], IntWrapper, int, long[], IntWrapper).

      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