RFR: 8335701: Make GrowableArray templated by an Index [v3]

Johan Sjölen jsjolen at openjdk.org
Fri Jul 26 12:46:47 UTC 2024


> Hi,
> 
> Today the GrowableArray has a set index type of `int`, this PR makes it so that you can set your own index type through a template parameter.
> 
> This opens up for a few new design choices:
> 
> - Do you know that you have a very small array? Use an `uint8_t` for len and cap, each.
> - Do you have a very large one? Use an `uint64_t`.
> 
> The code has opted for `int` being default, as to keep identical semantics for all existing code and to let users not have to worry about the index if they don't care.
> 
> One "major" change that I don't want to get lost in the review: I've changed the mid-point calculation to be overflow insensitive without casting.
> 
> 
> 
> // Old 
> mid = ((max + min) / 2);
> // New
> mid = min + ((max - min) / 2);
> 
> Some semi-rigorous thinking:
> min \in [0, len)
> max \in [0, len)
> min <= max
> max - min / 2 \in [0, len/2)
> Maximizing min and max => len + 0
> Maximizing max, minimizing min => len/2
> Minimizing max, maximizing min => max = min => min
> 
> 
> // Proof that they're identical when m, h, l \in N
> (1) m = l + (h - l) / 2 <=>
> 2m = 2l + h - l = h + l
> 
> (2) m = (h + l) / 2 <=>
> 2m = h + l
> (1) = (2)
> QED

Johan Sjölen has updated the pull request incrementally with four additional commits since the last revision:

 - Fix
 - Apparently this(!)
 - This?
 - Use COMMA

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/20031/files
  - new: https://git.openjdk.org/jdk/pull/20031/files/b5a87422..937f6eb6

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=20031&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=20031&range=01-02

  Stats: 3 lines in 3 files changed: 0 ins; 0 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/20031.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/20031/head:pull/20031

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


More information about the serviceability-dev mailing list