Immutable woes

Bob Cowdery bob at bobcowdery.plus.com
Tue Sep 21 01:18:25 PDT 2010


 Ok, so assumeUnique when I read it a bit more will still share data but
idup will copy data. Where are the docs for that. Something else not in
the book - but then I guess there is a lot of detail not in the book.
Thank goodness for forums.

bob

On 21/09/2010 09:10, Pelle wrote:
> On 09/21/2010 09:29 AM, Bob Cowdery wrote:
>>   Hi
>>
>> I'm stuggling with immutable.
>>
>> I have a fixed size buffer which is used as a circular buffer of floats
>> and is effectively double buffering data I wish to transfer to another
>> thread. At an appropriate point I take the top half or bottom half of
>> the buffer and send it to another thread.
>>
>> To do this I need to copy the data to an immutable transfer buffer to
>> use in the send. I'm sure this is simple but I can't figure it.
>>
>> if I say something like:
>> float[] xfer = new float[512];
>> xfer = buffer[0 .. $/2];
>> tid.send(xfer);
>>
>> it rightly tells me 'thread local data not allowed'. If I make it:
>>
>> immutable (float)[] xfer;
>> xfer = buffer[0 .. $/2];
>> tid.send(xfer);
>>
>> it tells me 'can't implicitly convert float[] to immutable (float)[]'
>>
>> If I try a float by float copy into xfer it can't because I've said the
>> buffer is immutable. In the first example I can't figure out how to
>> convert the slice into an immutable copy which I think is what I should
>> be doing.
>>
>> Can someone point me in the right direction.
>>
>> Thanks
>> Bob
>>
>
> immutable(float)[] xfer = buffer[0 .. $/2].idup;
> tid.send(xfer);
>
> Don't use assumeUnique for non-unique references.



More information about the Digitalmars-d-learn mailing list