RFR: 8304759: Add BitMap iterators

Kim Barrett kbarrett at openjdk.org
Sat Mar 25 15:50:17 UTC 2023


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.

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

Commit messages:
 - bitmap iterators

Changes: https://git.openjdk.org/jdk/pull/13184/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13184&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8304759
  Stats: 369 lines in 4 files changed: 369 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/13184.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13184/head:pull/13184

PR: https://git.openjdk.org/jdk/pull/13184


More information about the hotspot-dev mailing list