Part 1 Proposal for JDK-8264594
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Mon May 31 13:56:32 UTC 2021
Hi Lee,
this looks good.
One thing I note is that there's an ambiguity as to whether the segment
index is expressed as a logical index, or a raw byte offset. Your
snippet does the latter. If we want to follow MemoryAccess, perhaps that
calls for 2 overloads (copyFromArrayAtIndex/copyFromArrayAtOffset), as I
imagine both could be useful, depending on the case?
The javadoc will have to say something when the segment being used is
backed by the very array that is the source/target of the copy (we have
some text like that in MemorySegment::copyFrom).
I think it would be helpful to progress further with this, add the
remaining templates (w/o ByteOrder, for now) test and see how it works
in practice.
I will add (or just file a simple PR, so that you can just borrow from
it - should be a single method) something to do the segment copy with swap.
Thanks!
Maurizio
On 28/05/2021 22:37, leerho wrote:
> Maurizio,
>
> Again sorry about the delay.
>
> Attached is a template proposal for the MemoryCopy class.
>
> I can't complete this without your proposed new copyFrom(...) method
> in MemorySegment. As it is written, it should work, but without the
> byte swap capability.
>
> I can complete the rest of the primitives like this template, if you
> would like with javadocs. I could also start writing tests, but
> without the byte-swap.
>
> Let me know what would be most helpful.
>
> Cheers,
>
> Lee
>
>
>
>
>
>
>
>
>
>
> On Thu, May 20, 2021 at 11:36 AM leerho <leerho at gmail.com
> <mailto:leerho at gmail.com>> wrote:
>
> Of course!
>
> On Thu, May 20, 2021 at 9:42 AM Maurizio Cimadamore
> <maurizio.cimadamore at oracle.com
> <mailto:maurizio.cimadamore at oracle.com>> wrote:
>
>
> On 20/05/2021 17:13, leerho wrote:
>> I am not sure if the /dstSegSlice/ requires the /srcCopyLen/.
>> I would hope that it is smart enough to realize that the
>> input length is smaller than the given offset minus the
>> segment size.
>
> asSlice has an overload that just takes an offset and infers
> the resulting size from there.
>
> But that doesn't seem what you want here - as you want the
> slice to have a specific size (the size of the input array).
>
> MemorySegment::copyFrom wants the two segments to have the
> same size, so I think you need that.
>
> In terms of performance, there's no difference between
> asSlice(offset) and asSlice(offset, size) - you have to create
> a new segment anyway.
>
> Maurizio
>
>
More information about the panama-dev
mailing list