From: anon@anon.org (anon)
Subject: Re: Ada array vs C pointer (call by reference)
Date: Sat, 28 Jun 2008 01:21:33 GMT
Date: 2008-06-28T01:21:33+00:00 [thread overview]
Message-ID: <xmg9k.78148$102.22623@bgtnsc05-news.ops.worldnet.att.net> (raw)
In-Reply-To: d390ae47-83b1-4cfb-8e66-d6a92f38cf4e@z32g2000prh.googlegroups.com
The unsafe way is to use "Address" attribute.
function pwmRead ( Count : Interfaces.C.int ;
Data : System.Address ) return Interfaces.C.int ;
pragma Import ( C, pwmRead, "pwmRead" ) ;
The standard safe method you must use two interface packages.
Interfaces.C ;
Interfaces.C.Pointers ;
and create a C type of pointer package for the Float type, such as
type Float_array is array ( Interfaces.C.size_t range <> )
of aliased float;
package Float_Pointer is new
Interfaces.C.Pointers ( Index => size_t,
Element => Float,
Element_Array => Float_array,
Default_Terminator => 0 ) ;
study RM B.3.2 ( 45 ) for an example that uses character array. Should
be easy to adapt to Float.
In <d390ae47-83b1-4cfb-8e66-d6a92f38cf4e@z32g2000prh.googlegroups.com>, Adrian Hoe <abyhoe@gmail.com> writes:
>Hi,
>
>I have a C library function which takes a float * as a parameter. The
>function is as below:
>
> int pwmRead (int pwmCount, float * data);
>
>where data is an array of float which size is determined by pwmCount.
>
>In Ada, I have:
>
> PWM_Count : Integer := No_Of_Components_Intended;
> PWM_Data : array (1 .. PWM_Count) of Float;
>
>My concern is how safe to pass an Ada array to a C function as a
>pointer (call by reference)? I presume Ada will allocate contiguous
>memory for array, but what if it does not? How can we establish a
>deterministic allocation and to make sure float * is accessed
>contiguously? Is there any "safe" way to do this?
>
>Thanks.
>--
>Adrian Hoe
>http://adrianhoe.com
prev parent reply other threads:[~2008-06-28 1:21 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-27 1:39 Ada array vs C pointer (call by reference) Adrian Hoe
2008-06-27 1:42 ` Adrian Hoe
2008-06-27 2:55 ` Adam Beneschan
2008-06-27 13:02 ` Maciej Sobczak
2008-06-27 13:15 ` Adrian Hoe
2008-06-27 14:43 ` Georg Bauhaus
2008-06-27 14:47 ` Georg Bauhaus
2008-06-27 20:35 ` Maciej Sobczak
2008-06-27 22:00 ` Georg Bauhaus
2008-06-27 22:46 ` Keith Thompson
2008-06-27 16:11 ` Keith Thompson
2008-06-27 17:00 ` Robert A Duff
2008-06-27 18:15 ` Keith Thompson
2008-06-28 14:02 ` Stephen Leake
2008-06-28 21:18 ` Keith Thompson
2008-07-03 12:44 ` Rob Norris
2008-06-27 20:44 ` Maciej Sobczak
2008-06-27 22:14 ` Keith Thompson
2008-06-27 22:36 ` Adam Beneschan
2008-06-28 14:04 ` Stephen Leake
2008-06-28 21:22 ` Keith Thompson
2008-06-30 17:13 ` Adam Beneschan
2008-06-28 17:52 ` Robert A Duff
2008-06-30 17:13 ` Adam Beneschan
2008-06-30 18:55 ` Robert A Duff
2008-07-01 21:19 ` Randy Brukardt
2008-07-01 21:19 ` Randy Brukardt
2008-06-28 0:56 ` Peter C. Chapin
2008-06-28 14:11 ` Maciej Sobczak
2008-06-28 17:49 ` tmoran
2008-06-28 21:46 ` Keith Thompson
2008-06-28 17:44 ` Robert A Duff
2008-07-01 21:10 ` Randy Brukardt
2008-06-27 18:13 ` tmoran
2008-06-27 20:49 ` Maciej Sobczak
2008-06-27 4:10 ` Jeffrey R. Carter
2008-06-27 8:22 ` Adrian Hoe
2008-06-27 15:07 ` Adam Beneschan
2008-06-27 22:54 ` Jeffrey R. Carter
2008-06-28 1:15 ` Adrian Hoe
2008-06-28 2:17 ` Adam Beneschan
2008-07-01 21:31 ` Randy Brukardt
2008-07-01 21:31 ` Randy Brukardt
2008-08-22 4:06 ` Adrian Hoe
2008-06-28 4:59 ` Jeffrey R. Carter
2008-06-29 3:48 ` anon
2008-06-28 1:21 ` anon [this message]
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox