Returns a **flatten** list of ``('field path', field item)`` tuples
        for each :class:`Field` *nested* in the `Structure`.

        :param str path: field path of the `Structure`.
        :keyword bool nested: if ``True`` all :class:`Pointer` fields in the
            :attr:`~Pointer.data` objects of all :class:`Pointer` fields in
            the `Structure` list their referenced :attr:`~Pointer.data` object
            field items as well (chained method call).

def field_items(self, path=str(), **options):
        """ Returns a **flatten** list of ``('field path', field item)`` tuples
        for each :class:`Field` *nested* in the `Structure`.

        :param str path: field path of the `Structure`.
        :keyword bool nested: if ``True`` all :class:`Pointer` fields in the
            :attr:`~Pointer.data` objects of all :class:`Pointer` fields in
            the `Structure` list their referenced :attr:`~Pointer.data` object
            field items as well (chained method call).
        """
        parent = path if path else str()

        items = list()
        for name, item in self.items():
            item_path = '{0}.{1}'.format(parent, name) if parent else name
            # Container
            if is_container(item):
                for field in item.field_items(item_path, **options):
                    items.append(field)
            # Pointer
            elif is_pointer(item) and get_nested(options):
                for field in item.field_items(item_path, **options):
                    items.append(field)
            # Field
            elif is_field(item):
                items.append((item_path, item))
            else:
                raise MemberTypeError(self, item, item_path)
        return items