docs: def _read_bits(cls, raw_value):
          """Generator that takes a memory view and provides bitfields from it.
          After creating the generator, call `send(None)` to initialise it, and
          thereafter call `send(need_bits)` to obtain that many bits.
          """
          have_bits = 0
          bits = 0
          byte_source = iter(raw_value)
          result = 0
          while True:
              need_bits = yield result
              while have_bits < need_bits:
                  try:
                      bits = (bits << 8) | int(next(byte_source))
                      have_bits += 8
                  except StopIteration:
                      return
              result = int(bits >> (have_bits - need_bits))
              bits &= (1 << (have_bits - need_bits)) - 1
              have_bits -= need_bits