RFR: 8331193: Return references when possible in GrowableArray [v9]

Andrey Turbanov aturbanov at openjdk.org
Mon May 27 10:09:08 UTC 2024


On Thu, 23 May 2024 08:28:14 GMT, Johan Sjölen <jsjolen at openjdk.org> wrote:

>> Hi,
>> 
>> This PR introduces the possibility of using references more often when using GrowableArray, where as previously this was only possible when using the `at()` method. This lets us avoid copying and redundant method calls and makes the API more streamlined. After the patch, we can use `at_grow` just like `at` works. The same goes for `top`, `first`, and `last`.
>> 
>> 
>> Some example code:
>> ```c++
>> // Before this patch this worked:
>> GrowableArray<int> arr(8,8,-1); // Pre-fill with 8 -1s
>> int& x = arr.at(7);
>> if (x == -1) {
>>   x = 2;
>> }
>> assert(arr.at(7) == 2, "this holds");
>> // but this was forbidden
>> int& x = arr.at_grow(9, -1); // Compilation error! at_grow returns E, not E&
>> // so we had to do
>> int x = arr.at_grow(9, -1);
>> if (x == -1) {
>>   arr.at_put(9, 2);
>> }
>> 
>> 
>> Thanks.
>
> Johan Sjölen has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Merge remote-tracking branch 'origin/return-reference' into return-reference
>  - Use references when using top()

src/hotspot/share/utilities/growableArray.hpp line 173:

> 171:   E const& top() const {
> 172:     assert(_len > 0, "empty");
> 173:     return  _data[_len - 1];

Suggestion:

    return _data[_len - 1];

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

PR Review Comment: https://git.openjdk.org/jdk/pull/18975#discussion_r1615830435


More information about the hotspot-dev mailing list