[05/23] Add more iterator utilities

Jeff Law law@redhat.com
Wed Nov 25 20:12:59 GMT 2020



On 11/13/20 1:13 AM, Richard Sandiford via Gcc-patches wrote:
> This patch adds some more iterator helper classes.  They really fall
> into two groups, but there didn't seem much value in separating them:
>
> - A later patch has a class hierarchy of the form:
>
>      Base
>       +- Derived1
>       +- Derived2
>
>   A class wants to store an array A1 of Derived1 pointers and an
>   array A2 of Derived2 pointers.  However, for compactness reasons,
>   it was convenient to have a single array of Base pointers,
>   with A1 and A2 being slices of this array.  This reduces the
>   overhead from two pointers and two ints (3 LP64 words) to one
>   pointer and two ints (2 LP64 words).
>
>   But consumers of the class shouldn't be aware of this: they should
>   see A1 as containing Derived1 pointers rather than Base pointers
>   and A2 as containing Derived2 pointers rather than Base pointers.
>   This patch adds derived_iterator and const_derived_container
>   classes to support this use case.
>
> - A later patch also adds various linked lists.  This patch adds
>   wrapper_iterator and list_iterator classes to make it easier
>   to create iterators for these linked lists.  For example:
>
>     // Iterators for lists of definitions.
>     using def_iterator = list_iterator<def_info, &def_info::next_def>;
>     using reverse_def_iterator
>       = list_iterator<def_info, &def_info::prev_def>;
>
>   This in turn makes it possible to use range-based for loops
>   on the lists.
>
> The patch just adds the things that the later patches need; it doesn't
> try to make the classes as functionally complete as possible.  I think
> we should add extra functionality when needed rather than ahead of time.
>
> gcc/
> 	* iterator-utils.h (derived_iterator): New class.
> 	(const_derived_container, wrapper_iterator): Likewise.
> 	(list_iterator): Likewise.
OK
jeff



More information about the Gcc-patches mailing list