Return a bits reader that read bits from the stream reader r.


Bit streams are for reading and writing data at bit-level. As a simple example of bit encoded data, consider 16-bit color values. In 16-bit color, the red and blue components are encoded using 5-bits each, while the green component takes up 6-bit. The following program reads and writes 16-bit encoded color values:

function encode_color(rgb)
  let (out = byte_array_writer(),
       encoder = bits_writer(out))
  { write_bits(encoder, rgb['red], 5)
    write_bits(encoder, rgb['green], 6)
    write_bits(encoder, rgb['blue], 5)
    get_output_bytes(out) }

function decode_color(color)
  let (in = byte_array_reader(color),
          decoder = bits_reader(in),
          r = read_bits(decoder, 5),
          g = read_bits(decoder, 6),
          b = read_bits(decoder, 5))
      #{'red: r, 'green: g, 'blue: b}

decode_color(encode_color(#{'red: 12, 'green: 51, 'blue: 20}))
// #{red: 12, green: 51, blue: 20}

Also see:


Core Module Index | Contents