code: def index_field(self, index=Index()):
          
          # Set field index
          # Note: Updates the field alignment offset as well
          self.index = index
  
          # Bit offset for the next field
          byte, bit, address, base, update = index
          bit += self.bit_size
  
          # Field group size
          group_size, offset = divmod(bit, 8)
  
          # End of field group?
          if self.alignment.byte_size == group_size:
              # Bad aligned field group?
              if offset is not 0:
                  raise FieldGroupSizeError(self, index,
                                            Alignment(group_size + 1,
                                                      self.alignment.bit_offset))
              else:
                  # Move byte index for the next field group
                  byte += self.alignment.byte_size
                  # Reset bit offset for the next field group
                  bit = 0
                  # Move address for the next field group
                  address += self.alignment.byte_size
          # Index for the next field
          return Index(byte, bit, address, base, update)
docs: Indexes the `Field` with the given *index* und returns the
          :class:`Index` after the `Field`.
  
          :param Index index: start :class:`Index` for the `Field`.