Sorry, I forgot to answer and now I'm in movement. Look in LibC memcpy method (is not called exactly like that) and his uses. That's the faster you can move things inside the image. And remember: an EA is a pointer and a ByteArray is an array who will be passed as pointer too. Esteban
On 23 Feb 2017, at 17:21, raffaello.giulietti@lifeware.ch wrote:
Hi,
browsing through ByteArray's and ExternalAddress's code, I'm getting the impression that copying *portions* of ByteArrays from/to the C heap can be quite costly.
Copying *to* the C heap sometimes requires first copying the portion of the ByteArray into a newly instantiated temporary ByteArray, then copying the latter to the C heap.
Copying *from* the C heap might require explicitly looping over the single bytes. I say "might" because I still cannot find more direct way, as using ByteArray>>replaceFrom:to:with:startingAt: doesn't seem to work.
Any suggestion on more effective copy operations?
Thanks Raffaello
On 22/02/17 15:08, Raffaello Giulietti wrote: Hi Esteban,
not sure I'm understanding your snippet correctly.
Below is my try. It throws a SubscriptOutOfBounds exception in the last line. The reason is that the implementation of ByteArray replaceFrom:to:with:startingAt: does not consider that ea is meant to be a pointer to a C byte array, not an object whose content is to be copied directly.
| ea ba | ea := ExternalAddress gcallocate: 200. ba := ByteArray new: 100. ba replaceFrom: 1 to: 50 with: ea startingAt: 51.
Am I missing some point?
On 2017-02-21 17:20, Esteban Lorenzano wrote: usually, something more or less like this:
sourceByteArrayOrExternalAddress := ⦠some ... destEnternalAddressOrByteArray replaceFrom: 1 to: sourceByteArrayOrExternalAddress size with: sourceByteArrayOrExternalAddress startingAt: 1
and or course you can play with the starting points and sizes.
cheers, Esteban
On 21 Feb 2017, at 17:13, Raffaello Giulietti <raffaello.giulietti@lifeware.ch> wrote:
Hi,
I'm having a hard time finding documentation on how to copy a portion of a ByteArray to/from another portion of a heap allocated C byte array with UFFI.
My current reference is https://ci.inria.fr/pharo-contribution/view/Books/job/PharoBookWorkInProgres...
Thanks for directing me at relevant docs or examples and sorry in advance if I missed some important point in the docs.
RG