RFR: 8304759: Add BitMap iterators [v2]

Stefan Karlsson stefank at openjdk.org
Wed Mar 29 09:02:35 UTC 2023


On Wed, 29 Mar 2023 03:07:21 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:

>> Please review this change which adds iteration over the set bit positions of a
>> BitMap via an iterator object.  This is in addition to the existing iterate()
>> and reverse_iterate() functions that apply a function to the set bit positions.
>> 
>> There are two iterator classes: BitMap::Iterator and BitMap::ReverseIterator.
>> Iteration uses a single, self-contained iterator object, rather than a pair of
>> iterator objects as is done with standard library iterators.  This is because
>> the desired form of iteration over bitmaps doesn't lend itself well to the
>> begin/end pair style.  Typical usage is something like
>> 
>> 
>> for (BitMap::Iterator it{map, beg, end}; !it.is_empty(); it.step()) {
>>   ... use it.index()
>> }
>> 
>> 
>> However, as a syntactic convenience, these iterator classes provide begin()
>> and end() member functions returning objects supporting the requirements for
>> range-based for loops.  By constraining these objects to this usage we can
>> cope with the "iterator pair" requirements.  Usage is something like
>> 
>> 
>> for (BitMap::idx_t index : BitMap::Iterator{map, beg, end}) {
>>   ...
>> }
>> 
>> 
>> Testing:
>> mach5 tier1, which includes running the updated gtests on all Oracle-supported
>> platforms.
>
> Kim Barrett has updated the pull request incrementally with one additional commit since the last revision:
> 
>   better names for step functions

Marked as reviewed by stefank (Reviewer).

-------------

PR Review: https://git.openjdk.org/jdk/pull/13184#pullrequestreview-1362581227


More information about the hotspot-dev mailing list