RFR JDK-8234049: Implementation of Memory Access API (Incubator)

Paul Sandoz paul.sandoz at oracle.com
Mon Dec 9 18:36:58 UTC 2019


Oops, my bad, in my haste I misread the original code. (Effectively a reduction on OptionalLong where empty dominates, but the code to write that is I think less clear than the imperative loop.)

Paul.

> On Dec 7, 2019, at 11:02 AM, Maurizio Cimadamore <maurizio.cimadamore at oracle.com> wrote:
> 
> 
> On 06/12/2019 21:04, Paul Sandoz wrote:
>> GroupLayout.java
>>>> 
>>   80         OptionalLong sizeof(List<MemoryLayout> elems) {
>>   81             long size = 0;
>>   82             for (MemoryLayout elem : elems) {
>>   83                 if (AbstractLayout.optSize(elem).isPresent()) {
>>   84                     size = sizeOp.applyAsLong(size, elem.bitSize());
>>   85                 } else {
>>   86                     return OptionalLong.empty();
>>   87                 }
>>   88             }
>>   89             return OptionalLong.of(size);
>>   90         }
>> 
>> FWIW you can do this:
>> 
>> OptionalLong sizeof(List<MemoryLayout> elems) {
>>     return elems.stream().filter(e -> AbstractLayout.optSize(e).isPresent()).mapToLong(MemoryLayout::bitSize)
>>             .reduce(sizeOp);
> 
> 
> Looked at this more carefully - the code you suggest has a slightly different behavior than the one I wrote - note that the original code short-circuit when the first layout member with no size is encountered. IIUC your code will just drop unsized member layouts, and compute size on the rest - which is not what I had in mind. Am I understanding correctly?
> 
> Maurizio
> 



More information about the core-libs-dev mailing list