docs: def unread(self, c):
          """Unread the given character, byte, or code point.
  
          If this is a unicode buffer and the input is an int or byte, it will be interpreted as an ordinal representing
          a unicode code point.
  
          If this is a binary buffer, the input must be a byte or int; a unicode character will raise an error.
          """
          if self.position < 1:
              raise IndexError('Cannot unread an empty buffer queue.')
          if isinstance(c, six.text_type):
              if not self.is_unicode:
                  BufferQueue._incompatible_types(self.is_unicode, c)
          else:
              c = self.__chr(c)
          num_code_units = self.is_unicode and len(c) or 1
          if self.__offset == 0:
              if num_code_units == 1 and six.PY3:
                  if self.is_unicode:
                      segment = c
                  else:
                      segment = six.int2byte(c)
              else:
                  segment = c
              self.__segments.appendleft(segment)
          else:
              self.__offset -= num_code_units
  
              def verify(ch, idx):
                  existing = self.__segments[0][self.__offset + idx]
                  if existing != ch:
                      raise ValueError('Attempted to unread %s when %s was expected.' % (ch, existing))
              if num_code_units == 1:
                  verify(c, 0)
              else:
                  for i in range(num_code_units):
                      verify(c[i], i)
          self.__size += num_code_units
          self.position -= num_code_units