Class LongVariableByte

java.lang.Object
me.lemire.longcompression.LongVariableByte
All Implemented Interfaces:
ByteLongCODEC, LongCODEC, SkippableLongCODEC

public class LongVariableByte extends Object implements LongCODEC, ByteLongCODEC, SkippableLongCODEC
Implementation of variable-byte. For best performance, use it using the ByteLongCODEC interface. Note that this does not use differential coding: if you are working on sorted lists, you must compute the deltas separately.
Author:
Benoit Lacelle
  • Constructor Details

    • LongVariableByte

      public LongVariableByte()
  • Method Details

    • compress

      public void compress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos)
      Description copied from interface: LongCODEC
      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:
      compress in interface LongCODEC
      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
    • 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
    • compress

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

      public void uncompress(long[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos)
      Description copied from interface: LongCODEC
      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 LongCODEC
      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
    • uncompress

      public void uncompress(byte[] in, IntWrapper inpos, int inlength, long[] out, IntWrapper outpos)
      Description copied from interface: ByteLongCODEC
      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 ByteLongCODEC
      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 write the compressed output in out
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • 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
    • makeBuffer

      protected ByteBuffer makeBuffer(int sizeInBytes)
      Creates a new buffer of the requested size. In case you need a different way to allocate buffers, you can override this method with a custom behavior. The default implementation allocates a new Java direct ByteBuffer on each invocation.