docs: def register(self, hdrs):
          # type: (Union[HPackLitHdrFldWithIncrIndexing, H2Frame, List[HPackHeaders]]) -> None  # noqa: E501
          """register adds to this table the instances of
          HPackLitHdrFldWithIncrIndexing provided as parameters.
  
          A H2Frame with a H2HeadersFrame payload can be provided, as much as a
          python list of HPackHeaders or a single HPackLitHdrFldWithIncrIndexing
          instance.
          @param HPackLitHdrFldWithIncrIndexing|H2Frame|list of HPackHeaders hdrs: the header(s) to register  # noqa: E501
          @raise AssertionError
          """
          if isinstance(hdrs, H2Frame):
              hdrs = [hdr for hdr in hdrs.payload.hdrs if isinstance(hdr, HPackLitHdrFldWithIncrIndexing)]  # noqa: E501
          elif isinstance(hdrs, HPackLitHdrFldWithIncrIndexing):
              hdrs = [hdrs]
          else:
              hdrs = [hdr for hdr in hdrs if isinstance(hdr, HPackLitHdrFldWithIncrIndexing)]  # noqa: E501
  
          for hdr in hdrs:
              if hdr.index == 0:
                  hdr_name = hdr.hdr_name.getfieldval('data').origin()
              else:
                  idx = int(hdr.index)
                  hdr_name = self[idx].name()
              hdr_value = hdr.hdr_value.getfieldval('data').origin()
  
              # Note: we do not delete any existing hdrentry with the same names
              # and values, as dictated by RFC 7541 par2.3.2
  
              entry = HPackHdrEntry(hdr_name, hdr_value)
              # According to RFC7541 par4.4, "Before a new entry is added to
              # the dynamic table, entries are evicted
              # from the end of the dynamic table until the size of the dynamic
              # table is less than or equal to (maximum size - new entry size)
              # or until the table is empty"
              # Also, "It is not an error to attempt to add an entry that is
              # larger than the maximum size; an attempt to add an entry larger
              # than the maximum size causes the table to be emptied of all
              # existing entries and results in an empty table"
              # For this reason, we first call the _reduce_dynamic_table and
              # then throw an assertion error if the new entry does not fit in
              new_entry_len = len(entry)
              self._reduce_dynamic_table(new_entry_len)
              assert(new_entry_len <= self._dynamic_table_max_size)
              self._dynamic_table.insert(0, entry)