Re: Convert C array pointer to a D slice without data copy

2015-05-18 Thread ParticlePeter via Digitalmars-d-learn

On Monday, 18 May 2015 at 09:23:26 UTC, tcak wrote:

On Monday, 18 May 2015 at 09:18:33 UTC, ParticlePeter wrote:
I get the point to an array from a c function, the data size 
from another function. The data should be only readable at the 
D side, but I would like to use it as a D slice without 
copying the data. Is this possible ?


char* dataPtr;
size_t dataLen;

auto data = dataPtr[0 .. dataLen];

This doesn't do any copying. BUT I am not sure what GC would be 
doing about it. After you use it, you might want to set `data` 
to null in case of a problem.


Thanks, works. Should be in the Interfacing to C Reference 
Article.


Re: Convert C array pointer to a D slice without data copy

2015-05-18 Thread John Colvin via Digitalmars-d-learn

On Monday, 18 May 2015 at 09:23:26 UTC, tcak wrote:

On Monday, 18 May 2015 at 09:18:33 UTC, ParticlePeter wrote:
I get the point to an array from a c function, the data size 
from another function. The data should be only readable at the 
D side, but I would like to use it as a D slice without 
copying the data. Is this possible ?


char* dataPtr;
size_t dataLen;

auto data = dataPtr[0 .. dataLen];

This doesn't do any copying. BUT I am not sure what GC would be 
doing about it. After you use it, you might want to set `data` 
to null in case of a problem.


No need to worry about the GC here, it only scans the stack and 
its own heap (unless you specifically add a new root).


Re: Convert C array pointer to a D slice without data copy

2015-05-18 Thread tcak via Digitalmars-d-learn

On Monday, 18 May 2015 at 09:18:33 UTC, ParticlePeter wrote:
I get the point to an array from a c function, the data size 
from another function. The data should be only readable at the 
D side, but I would like to use it as a D slice without copying 
the data. Is this possible ?


char* dataPtr;
size_t dataLen;

auto data = dataPtr[0 .. dataLen];

This doesn't do any copying. BUT I am not sure what GC would be 
doing about it. After you use it, you might want to set `data` to 
null in case of a problem.


Convert C array pointer to a D slice without data copy

2015-05-18 Thread ParticlePeter via Digitalmars-d-learn
I get the point to an array from a c function, the data size from 
another function. The data should be only readable at the D side, 
but I would like to use it as a D slice without copying the data. 
Is this possible ?






Re: Convert C array pointer to a D slice without data copy

2015-05-18 Thread Marco Leise via Digitalmars-d-learn
Am Mon, 18 May 2015 09:51:48 +
schrieb John Colvin john.loughran.col...@gmail.com:

 No need to worry about the GC here, it only scans the stack and 
 its own heap (unless you specifically add a new root).

And even if you add a root it wont free anything it did not
allocate itself! You could even append to your C array. It
will check how much capacity the slice still has on the GC
heap and after realizing the .ptr is not even in one of its
pools, allocate a GC copy of the C array right away.

-- 
Marco