On 23/02/17 19:17, Esteban Lorenzano wrote:
> 
>> On 23 Feb 2017, at 19:11, raffaello.giulie...@lifeware.ch wrote:
>>
>> Hi Esteban,
>>
>> yes, I already looked at LibC's memcpy, but that doesn't help in case
>> you need to copy a *portion* of the ByteArray that does not start at
>> index 1. While one can do pointer arithmetic on ExternalAddress, this
>> does not, of course, apply to ByteArray.
>>
>> To sum up, I think Pharo 5 currently lacks an efficient way to copy
>> parts of ByteArrays to/from the C heap. One has to instantiate
>> additional temporary ByteArrays and perform copies between ByteArrays in
>> addition to LibC>>memcpy.
>>
>> But I see there's an Alien class which seems to better support such
>> copying. Thus, I wonder if it is somehow compatible with the rest of UFFI.
> 
> Which Alien class?
> 
> Esteban

What do you mean?
I see it in package Alien-Core.




> 
>>
>>
>>
>>
>>
>>
>> On 23/02/17 17:35, Esteban Lorenzano wrote:
>>> 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.giulie...@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.giulie...@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/PharoBookWorkInProgress/lastSuccessfulBuild/artifact/book-result/UnifiedFFI/UnifiedFFI.pdf
>>>>>>>
>>>>>>>
>>>>>>> Thanks for directing me at relevant docs or examples and sorry in
>>>>>>> advance if I missed some important point in the docs.
>>>>>>>
>>>>>>> RG
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>>
> 
> 


Reply via email to