Thread overview
Pointer to std.container.Array data for C library
Aug 28, 2015
Oleg
Aug 28, 2015
John Colvin
Aug 28, 2015
Oleg
Aug 28, 2015
John Colvin
Aug 28, 2015
Oleg
Aug 28, 2015
Oleg
August 28, 2015
Hello!
Is it possible to get pointer to a data in std.container.Array like .ptr from an array? I need to pass a pointer to some C function (from DerelictGL3 binding) and avoid GC allocation.
Thank you!
August 28, 2015
On Friday, 28 August 2015 at 17:45:21 UTC, Oleg wrote:
> Hello!
> Is it possible to get pointer to a data in std.container.Array like .ptr from an array? I need to pass a pointer to some C function (from DerelictGL3 binding) and avoid GC allocation.
> Thank you!

I'm pretty sure you can just take the address of the first element, e.g. &a[0] or &a.front
August 28, 2015
On Friday, 28 August 2015 at 18:21:04 UTC, John Colvin wrote:
> On Friday, 28 August 2015 at 17:45:21 UTC, Oleg wrote:
>> Hello!
>> Is it possible to get pointer to a data in std.container.Array like .ptr from an array? I need to pass a pointer to some C function (from DerelictGL3 binding) and avoid GC allocation.
>> Thank you!
>
> I'm pretty sure you can just take the address of the first element, e.g. &a[0] or &a.front

I've tried, it throws
core.exception.RangeError@/usr/include/dmd/phobos/std/container/array.d(571): Range violation

If I make an array from the Array container with foreach ad pass it's .ptr - it works
August 28, 2015
On Friday, 28 August 2015 at 18:31:00 UTC, Oleg wrote:
> On Friday, 28 August 2015 at 18:21:04 UTC, John Colvin wrote:
>> On Friday, 28 August 2015 at 17:45:21 UTC, Oleg wrote:
>>> Hello!
>>> Is it possible to get pointer to a data in std.container.Array like .ptr from an array? I need to pass a pointer to some C function (from DerelictGL3 binding) and avoid GC allocation.
>>> Thank you!
>>
>> I'm pretty sure you can just take the address of the first element, e.g. &a[0] or &a.front
>
> I've tried, it throws
> core.exception.RangeError@/usr/include/dmd/phobos/std/container/array.d(571): Range violation

That's unexpected. Could you provide a full example that does this?
August 28, 2015
On Friday, 28 August 2015 at 18:40:33 UTC, John Colvin wrote:
> On Friday, 28 August 2015 at 18:31:00 UTC, Oleg wrote:
>> On Friday, 28 August 2015 at 18:21:04 UTC, John Colvin wrote:
>>> On Friday, 28 August 2015 at 17:45:21 UTC, Oleg wrote:
>>>> Hello!
>>>> Is it possible to get pointer to a data in std.container.Array like .ptr from an array? I need to pass a pointer to some C function (from DerelictGL3 binding) and avoid GC allocation.
>>>> Thank you!
>>>
>>> I'm pretty sure you can just take the address of the first element, e.g. &a[0] or &a.front
>>
>> I've tried, it throws
>> core.exception.RangeError@/usr/include/dmd/phobos/std/container/array.d(571): Range violation
>
> That's unexpected. Could you provide a full example that does this?

I found solution. I call length instead of reserve. It calls ensureInitialized and everything works fine. By default, Array won't initialize store.
August 28, 2015
On Friday, 28 August 2015 at 18:46:23 UTC, Oleg wrote:

> I found solution. I call length instead of reserve. It calls ensureInitialized and everything works fine. By default, Array won't initialize store.

Oh, reserve calls it too. My mistake.
I found the problem, that's because I passed an empty Array (like Array!int.init).