RFR: 8303621: BitMap::iterate should support lambdas and other function objects

Kim Barrett kbarrett at openjdk.org
Mon Mar 6 10:15:36 UTC 2023


On Mon, 6 Mar 2023 07:27:23 GMT, Kim Barrett <kbarrett at openjdk.org> wrote:

> Please review this enhancement of BitMap::iterate to support lambdas and other
> function objects as the operation being applied to the set bit indices. Some
> for-loops using BitMap::get_next_one_offset have been changed to use
> BitMap::iterate with a lambda.
> 
> (One reason for changing the for-loops is that I'm considering a change to the
> get_next_one_offset API, and reducing the number of direct uses will simplify
> that.)
> 
> For convenience, the function can either return void (always iterate over the
> whole range) or bool (stop iteration if returns false).  Iteration using
> closure objects invoked via a do_bit member function are now implemented by
> being wrapped in a lambda, so get the same convenience.  (Though, of course,
> if the closure is derived from BitMapClosure then do_bit returns bool.)
> 
> The unit tests are written as "early" tests, not requiring an initialized VM.
> They also avoid any C heap allocation (even though C heap allocation has very
> early support). This is done to minimize the requirements for running the
> tests, since BitMap is used in a lot of places. This attempts to run these
> tests before uses. (Yes, I know about JDK-8257226; maybe that will be fixed
> someday.) (Some existing BitMap gtests should be modified to do similarly; see
> JDK-8303636.)
> 
> Testing:
> mach5 tier1-7

src/hotspot/share/utilities/bitMap.hpp line 273:

> 271:   // terminates early.  Otherwise, the result must be convertible to bool.
> 272:   //
> 273:   // - cl->do_bit(i) is a valid expression whose result is convertible to bool.

This description was an intermediate that I wasn't finished with, and isn't correct since it doesn't
describe `cl->do_bit(i)` as potentially returning void, which is supported by the implementation.
I seem to have lost the final version, and will need to rewrite it.

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

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


More information about the hotspot-dev mailing list