Indexes the `Field` with the given *index* und returns the
        :class:`Index` after the `Field`.

        :param Index index: start :class:`Index` for the `Field`.

def index_field(self, index=Index()):
        """ Indexes the `Field` with the given *index* und returns the
        :class:`Index` after the `Field`.

        :param Index index: start :class:`Index` for the `Field`.
        """
        # 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)