Class FourFlagsIntEncoder

  • Direct Known Subclasses:
    NOnesIntEncoder

    public class FourFlagsIntEncoder
    extends ChunksIntEncoder
    A ChunksIntEncoder which encodes values in chunks of 4. Every group starts with a single byte (called indicator) which represents 4 - 2 bit flags, where the values:
    • 1, 2 or 3 mean the encoded value is '1', '2' or '3' respectively.
    • 0 means the value is encoded using VInt8IntEncoder, and the encoded bytes follow the indicator.
      Since value 0 is illegal, and 1-3 are encoded in the indicator, the actual value that is encoded is value-4, which saves some more bits.
    Encoding example:
    • Original values: 6, 16, 5, 9, 7, 1, 11
    • After sorting: 1, 5, 6, 7, 9, 11, 16
    • D-Gap computing: 1, 4, 1, 1, 2, 5 (so far - done by DGapIntEncoder)
    • Encoding: 1,0,1,1 as the first indicator, followed by 0 (4-4), than 2,0,0,0 as the second indicator, followed by 1 (5-4) encoded with.
    • Binary encode: 01 | 01 | 00 | 01 00000000 00 | 00 | 00 | 10 00000001 (indicators are underlined).
      NOTE: the order of the values in the indicator is lsb ⇒ msb, which allows for more efficient decoding.
    WARNING: This API is experimental and might change in incompatible ways in the next release.
    • Constructor Detail

      • FourFlagsIntEncoder

        public FourFlagsIntEncoder()
    • Method Detail

      • createMatchingDecoder

        public IntDecoder createMatchingDecoder()
        Description copied from class: IntEncoder
        Returns an IntDecoder which matches this encoder. Every encoder must return an IntDecoder and null is not a valid value. If an encoder is just a filter, it should at least return its wrapped encoder's matching decoder.

        NOTE: this method should create a new instance of the matching decoder and leave the instance sharing to the caller. Returning the same instance over and over is risky because encoders and decoders are not thread safe.

        Specified by:
        createMatchingDecoder in class IntEncoder