static int putVaruint64(PositionedByteRange dst, long val, boolean comp) {
    int w, y, len = 0;
    final int offset = dst.getOffset(), start = dst.getPosition();
    byte[] a = dst.getBytes();
    Order ord = comp ? DESCENDING : ASCENDING;
    if (-1 == unsignedCmp(val, 241L)) {
      dst.put((byte) val);
      len = dst.getPosition() - start;
      ord.apply(a, offset + start, len);
      return len;
    }
    if (-1 == unsignedCmp(val, 2288L)) {
      y = (int) (val - 240);
      dst.put((byte) (y / 256 + 241)).put((byte) (y % 256));
      len = dst.getPosition() - start;
      ord.apply(a, offset + start, len);
      return len;
    }
    if (-1 == unsignedCmp(val, 67824L)) {
      y = (int) (val - 2288);
      dst.put((byte) 249).put((byte) (y / 256)).put((byte) (y % 256));
      len = dst.getPosition() - start;
      ord.apply(a, offset + start, len);
      return len;
    }
    y = (int) val;
    w = (int) (val >>> 32);
    if (w == 0) {
      if (-1 == unsignedCmp(y, 16777216L)) {
        dst.put((byte) 250).put((byte) (y >>> 16)).put((byte) (y >>> 8)).put((byte) y);
        len = dst.getPosition() - start;
        ord.apply(a, offset + start, len);
        return len;
      }
      dst.put((byte) 251);
      putUint32(dst, y);
      len = dst.getPosition() - start;
      ord.apply(a, offset + start, len);
      return len;
    }
    if (-1 == unsignedCmp(w, 256L)) {
      dst.put((byte) 252).put((byte) w);
      putUint32(dst, y);
      len = dst.getPosition() - start;
      ord.apply(a, offset + start, len);
      return len;
    }
    if (-1 == unsignedCmp(w, 65536L)) {
      dst.put((byte) 253).put((byte) (w >>> 8)).put((byte) w);
      putUint32(dst, y);
      len = dst.getPosition() - start;
      ord.apply(a, offset + start, len);
      return len;
    }
    if (-1 == unsignedCmp(w, 16777216L)) {
      dst.put((byte) 254).put((byte) (w >>> 16)).put((byte) (w >>> 8)).put((byte) w);
      putUint32(dst, y);
      len = dst.getPosition() - start;
      ord.apply(a, offset + start, len);
      return len;
    }
    dst.put((byte) 255);
    putUint32(dst, w);
    putUint32(dst, y);
    len = dst.getPosition() - start;
    ord.apply(a, offset + start, len);
    return len;
  }
Encode an unsigned 64-bit unsigned integer {@code val} into {@code dst}.
@param dst  The destination to which encoded bytes are written.
@param val  The value to write.
@param comp Compliment the encoded value when {@code comp} is true.
@return number of bytes written.
hbase-common/src/main/java/org/apache/hadoop/hbase/util/OrderedBytes.java