function readRleBitPackedHybrid(reader, width, length, output) {
  if (!length) {
    length = reader.view.getUint32(reader.offset, true)
    reader.offset += 4
  }
  const startOffset = reader.offset
  let seen = 0
  while (seen < output.length) {
    const header = readVarInt(reader)
    if (header & 1) {
      // bit-packed
      seen = readBitPacked(reader, header, width, output, seen)
    } else {
      // rle
      const count = header >>> 1
      readRle(reader, count, width, output, seen)
      seen += count
    }
  }
  reader.offset = startOffset + length // duckdb writes an empty block
}
Read values from a run-length encoded/bit-packed hybrid encoding.

If length is zero, then read int32 length at the start.

@param {DataReader} reader
@param {number} width - width of each bit-packed group
@param {number} length - length of the encoded data
@param {DecodedArray} output