anchor.diff:  Requesting next pair with `readPair()` returns the following series value or a `null` once the series is completely
   read. The pair is a simple placeholder object with `getTimestamp()` and `getDoubleValue()` or `getLongValue()`.
   
  +For Java 8 streams support, use the following syntax (available only in 2.x format):
  +
  +[source, java]
  +----
  +----
  +
  +== Performance
  +
   == Internals
  +
  +=== Differences to the original paper
  +
  +* Maximum number of leadingZeros is stored with 6 bits to allow up to 63 leading zeros, which are necessary when
  +storing long values.
  +* Timestamp delta-of-delta are stored by first turning them with ZigZag encoding to positive integers and then
  +reduced by one to fit in the necessary bits. In the decoding phase all the values are incremented by one to fetch the
  + original value.
  +* The compressed blocks are created with a 27 bit delta header (unlike in the original paper, which uses a 14 bit delta
  +  header). This allows to use up to one day block size using millisecond precision.
   
   === Data structure
   
   Values must be inserted in the increasing time order, out-of-order insertions are not supported.
   
   The included ByteBufferBitInput and ByteBufferBitOutput classes use a big endian order for the data.
  -
  -=== Block size
  -
  -The compressed blocks are created with a 27 bit header (unlike in the original paper, which uses a 14 bit delta header). This allows to
  -use up to one day block size using millisecond precision.
   
   == Contributing
   
  
positive.code: [source, xml]
  ----
      <dependency>
          <groupId>fi.iki.yak.ts.compression</groupId>
          <artifactId>compression-gorilla</artifactId>
          <version>${version.compression-gorilla}</version>
      </dependency>
  ----
  
  === Compressing
  
  [source, java]
  ----
  long now = LocalDateTime.now(ZoneOffset.UTC).truncatedTo(ChronoUnit.HOURS)
          .toInstant(ZoneOffset.UTC).toEpochMilli();
  
  ByteBufferBitOutput output = new ByteBufferBitOutput();
  Compressor c = new Compressor(now, output);
  ----
  
  Compression class requires a block timestamp and an implementation of `BitOutput` interface. `ByteBufferBitOutput` is an in-memory example that uses off-heap storage.
  
  [source, java]
  ----
  
negative.code: 
  === Decompressing
  
  To decompress from the older 1.x format, use class ``Decompressor``. For 2.x, use ``GorillaDecompressor`` (recommended).
  ``ByteBufferLongInput`` is also recommended compared to ``ByteBufferBitInput`` because of performance if the 2.x
  format was used to compress the time series.
  
  [source, java]
  ----
  ByteBufferLongInput input = new ByteBufferLongInput(byteBuffer);
  GorillaDecompressor d = new GorillaDecompressor(input);
  ----
  
  To decompress a stream of bytes, supply `GorillaDecompressor` with a suitable implementation of `BitInput` interface.
   The ByteBufferLongInput allows to decompress a long array or existing `ByteBuffer` presentation with 8 byte word
   length.
  
  [source, java]
  ----
  