From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Interfacing Ada with C
Date: Sun, 25 Jul 2010 15:50:47 +0200
Date: 2010-07-25T15:50:48+02:00 [thread overview]
Message-ID: <18zszx6sjlloa$.k5nohxp9k27i$.dlg@40tude.net> (raw)
In-Reply-To: 143ef70b-7e74-426b-a621-a5fd157849be@x21g2000yqa.googlegroups.com
On Sun, 25 Jul 2010 05:21:44 -0700 (PDT), Ada novice wrote:
> What would the best way to interface this with Ada? The elements of my
> matrix will be formed in Ada, then the matrix will be passed to C to
> calculate the eigenvalues and then the latter passed back to Ada. The
> size of my matrix will be fixed say 3 x 3. As a novice in Ada, I would
> like to learn good programming practice and the best way is to use
> codes and learn from experts here in Ada.
Something like (not tested):
with Interfaces.C; use Interfaces.C;
package IMSL is
type Float_Matrix is -- Row-wise, packed/aligned
array (Positive range <>, Positive range <>) of C_Float;
pragma Convention (C, Float_Matrix);
type F_Complex is record
Re : C_Float;
Im : C_Float;
end record;
pragma Convention (C, F_Complex);
type Complex_Array is array (Positive range <>) of F_Complex;
pragma Convention (C, Complex_Array);
function F_Eig_Gen (Matrix : Float_Matrix) return Complex_Array;
end IMSL;
package body IMSL is
procedure Free (Ptr : System.Address);
pragma Import (C, Free, "free");
function F_Eig_Gen (Matrix : Float_Matrix) return Complex_Array is
begin
if Matrix'Length (1) /= Matrix'Length (2) then
raise Constraint_Error;
end if;
declare -- No idea, how they report convergence/accuracy errors
function Internal (N : Int; A : Address; Terminator : Address :=
Null_Address) return Address;
pragma Import (C, Internal, "imsl_f_eig_gen");
Ptr : Address := Internal
( Matrix'Length (1),
Matrix ( Matrix'First (1),
Matrix'First (2)
)' Address
);
Data : Complex_Array (1..Matrix'Length (1));
for Data'Address use Ptr;
pragma Import (Ada, Data);
Result : Complex_Array := Data; -- Copy, we don't own that memory
begin
Free (Ptr);
return Result;
end;
end F_Eig_Gen;
end IMSL;
Used as:
Values : Complex_Array :=
F_Eig_Gen
( ( ( 8.0,-1.0,-5.0),
(-4.0, 4.0,-2.0),
(18.0,-5.0,-7.0) )
);
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
next prev parent reply other threads:[~2010-07-25 13:50 UTC|newest]
Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-24 11:57 Interfacing Ada with C Ada novice
2010-07-24 12:08 ` Robert A Duff
2010-07-24 12:32 ` Ada novice
2010-07-24 14:52 ` Marco
2010-07-24 16:38 ` Simon Wright
2010-07-24 17:58 ` Ada novice
2010-07-25 8:29 ` Simon Wright
2010-07-25 12:21 ` Ada novice
2010-07-25 13:50 ` Dmitry A. Kazakov [this message]
2010-07-25 14:12 ` Ada novice
2010-07-25 14:17 ` Ada novice
2010-07-25 14:26 ` Simon Wright
2010-07-25 16:18 ` Ada novice
2010-07-25 17:06 ` Dmitry A. Kazakov
2010-07-25 17:42 ` Ada novice
[not found] ` <a5ba4513-ce2b-45d1-a5f4-ff1a7945b0b0@q12g2000yqj.googlegroups.com>
2010-07-25 18:26 ` Dmitry A. Kazakov
2010-07-25 18:52 ` Ada novice
2010-07-25 18:58 ` Dmitry A. Kazakov
2010-07-25 19:13 ` Ada novice
2010-07-25 19:19 ` Dmitry A. Kazakov
2010-07-25 19:28 ` Ada novice
2010-07-25 20:04 ` Dmitry A. Kazakov
2010-07-26 13:40 ` Ada novice
2010-07-26 14:52 ` Dmitry A. Kazakov
2010-07-26 17:14 ` Ada novice
[not found] ` <a2da2804-c19b-44cf-9855-834c602c4520@y11g2000yqm.googlegroups.com>
2010-07-26 17:32 ` Dmitry A. Kazakov
2010-07-26 17:50 ` Ada novice
2010-07-27 12:24 ` Peter Hermann
2010-07-27 19:01 ` Ada novice
2010-07-28 9:56 ` team-ada (was e: " Peter Hermann
2010-07-27 5:50 ` Ada novice
2010-07-27 7:27 ` Dmitry A. Kazakov
2010-07-27 7:43 ` Georg Bauhaus
2010-07-27 18:37 ` Ada novice
2010-07-27 18:40 ` Ada novice
2010-07-25 17:24 ` Simon Wright
2010-07-25 17:47 ` Simon Wright
2010-07-25 17:58 ` Ada novice
2010-07-25 23:21 ` Simon Wright
2010-07-26 1:24 ` John B. Matthews
2010-07-26 14:01 ` Ada novice
2010-07-26 15:46 ` sjw
[not found] ` <da987804-3948-4871-ab52-4a8e95f06d44@k39g2000yqb.googlegroups.com>
2010-07-26 19:46 ` Simon Wright
2010-07-26 20:39 ` Dmitry A. Kazakov
2010-07-27 5:46 ` Ada novice
2010-07-27 5:43 ` Ada novice
2010-07-27 17:33 ` Simon Wright
2010-07-27 18:34 ` Ada novice
2010-07-28 22:26 ` Simon Wright
2010-07-29 9:19 ` Ada novice
2010-07-29 19:14 ` Simon Wright
2010-07-29 20:25 ` Ada novice
2010-07-30 1:46 ` John B. Matthews
2010-07-30 9:09 ` sjw
2010-07-30 12:41 ` Ada novice
2010-07-30 15:13 ` John B. Matthews
2010-07-30 17:25 ` Ada novice
2010-07-30 19:41 ` John B. Matthews
2010-07-30 21:08 ` Ada novice
2010-07-30 22:19 ` Simon Wright
2010-07-31 12:19 ` Ada novice
2010-07-31 13:25 ` Simon Wright
2010-07-31 19:39 ` Ada novice
2010-07-31 21:02 ` Simon Wright
2010-08-01 9:36 ` Ada novice
2010-08-01 16:14 ` Simon Wright
2010-08-01 16:27 ` Ada novice
2010-08-01 17:33 ` Simon Wright
[not found] ` <997036dd-ca13-4cdf-8f88-9b47a9f83b2d@s9g2000yqd.googlegroups.com>
2010-07-31 13:08 ` Simon Wright
2010-07-31 13:17 ` Simon Wright
2010-07-30 15:10 ` John B. Matthews
2010-08-01 10:47 ` John B. Matthews
2010-08-01 17:08 ` Simon Wright
2010-08-02 1:08 ` John B. Matthews
2010-08-02 16:36 ` Simon Wright
2010-08-02 16:55 ` Ada novice
2010-08-05 9:14 ` Ada novice
2010-08-05 13:23 ` John B. Matthews
2010-08-05 13:57 ` sjw
2010-08-05 17:24 ` Ada novice
2010-08-05 17:59 ` Jeffrey Carter
2010-08-05 20:25 ` Simon Wright
2010-08-06 1:15 ` John B. Matthews
2010-08-06 9:11 ` Ada novice
2010-08-06 9:17 ` Ada novice
2010-08-06 8:04 ` Jacob Sparre Andersen
2010-08-06 8:42 ` Dmitry A. Kazakov
2010-08-06 9:26 ` Ada novice
2010-08-06 9:51 ` Dmitry A. Kazakov
2010-08-06 12:04 ` Ada novice
2010-08-06 16:49 ` Simon Wright
2010-08-06 17:27 ` Dmitry A. Kazakov
2010-08-06 18:15 ` Ada novice
2010-08-06 20:26 ` Simon Wright
2010-08-07 0:46 ` John B. Matthews
2010-08-07 7:59 ` Dmitry A. Kazakov
2010-08-07 9:09 ` Georg Bauhaus
2010-08-07 12:33 ` John B. Matthews
2010-08-06 9:49 ` Peter Hermann
2010-08-06 12:03 ` Ada novice
2010-08-07 4:07 ` Randy Brukardt
2010-08-07 8:10 ` Ada novice
2010-08-06 16:41 ` Simon Wright
2010-08-06 8:39 ` sjw
2010-07-24 16:44 ` Dmitry A. Kazakov
2010-07-24 18:04 ` Ada novice
2010-07-24 19:16 ` Dmitry A. Kazakov
2010-07-25 0:22 ` tmoran
-- strict thread matches above, loose matches on Subject: below --
2003-04-14 21:39 Paul Anderson
2003-04-14 23:05 ` tmoran
2003-04-16 2:56 ` Steve
2003-04-16 4:25 ` Steve
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox