java.lang.Object
me.lemire.integercompression.Simple16
All Implemented Interfaces:
IntegerCODEC, SkippableIntegerCODEC

public final class Simple16 extends Object implements IntegerCODEC, SkippableIntegerCODEC
This is an implementation of the popular Simple16 scheme. It is limited to 28-bit integers (between 0 and 2^28-1). Note that this does not use differential coding: if you are working on sorted lists, you must compute the deltas separately.

Adapted by D. Lemire from the Apache Lucene project.

  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos)
    Compress data from an array to another array.
    static final int
    compressblock(int[] out, int outOffset, int[] in, int inOffset, int n)
    Compress an integer array using Simple16
    static final int
    decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n)
    Decompress an integer array using Simple16
    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 num)
    Uncompress data from an array to another array.
    int
    maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength)
    Compute the maximum number of integers that might be required to store the compressed form of a given input array segment, without headers.
     
    static void
    uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength)
    Uncompress data from an array to another array.
    void
    uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos)
    Uncompress data from an array to another array.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • Simple16

      public Simple16()
  • 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 to IntegerCODEC.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 interface SkippableIntegerCODEC
      Parameters:
      in - input array
      inpos - where to start reading in the array
      inlength - how many integers to compress
      out - output array
      outpos - where to write in the output array
    • compressblock

      public static final int compressblock(int[] out, int outOffset, int[] in, int inOffset, int n)
      Compress an integer array using Simple16
      Parameters:
      out - the compressed output
      outOffset - the offset of the output in the number of integers
      in - the integer input array
      inOffset - the offset of the input in the number of integers
      n - the number of elements to be compressed
      Returns:
      the number of compressed integers
    • decompressblock

      public static final int decompressblock(int[] out, int outOffset, int[] in, int inOffset, int n)
      Decompress an integer array using Simple16
      Parameters:
      out - the decompressed output
      outOffset - the offset of the output in the number of integers
      in - the compressed input array
      inOffset - the offset of the input in the number of integers
      n - the number of elements to be compressed
      Returns:
      the number of processed integers
    • headlessUncompress

      public void headlessUncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos, int num)
      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 interface SkippableIntegerCODEC
      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 integers we want to decode. May be less than the actual number of compressed integers
    • maxHeadlessCompressedLength

      public int maxHeadlessCompressedLength(IntWrapper compressedPositions, int inlength)
      Description copied from interface: SkippableIntegerCODEC
      Compute the maximum number of integers 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 SkippableIntegerCODEC.headlessCompress(int[], IntWrapper, int, int[], IntWrapper).

      Specified by:
      maxHeadlessCompressedLength in interface SkippableIntegerCODEC
      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 integers to be compressed
      Returns:
      the maximum number of integers needed in the output array
    • uncompress

      public static void uncompress(int[] in, int tmpinpos, int inlength, int[] out, int currentPos, int outlength)
      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
      tmpinpos - where to start reading in the array
      inlength - length of the compressed data (ignored by some schemes)
      out - array where to write the compressed output
      currentPos - where to write the compressed output in out
      outlength - number of integers we want to decode
    • compress

      public void compress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos)
      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 interface IntegerCODEC
      Parameters:
      in - input array
      inpos - where to start reading in the array
      inlength - how many integers to compress
      out - output array
      outpos - where to write in the output array
    • uncompress

      public void uncompress(int[] in, IntWrapper inpos, int inlength, int[] out, IntWrapper outpos)
      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 interface IntegerCODEC
      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 compressed output
      outpos - where to start writing the uncompressed output in out
    • toString

      public String toString()
      Overrides:
      toString in class Object