package body gsl.matrix_double is
function fprintf
(m : access constant gsl_matrix; filename : String; format : String)
return int
is
cfilename : aliased String := filename & ASCII.nul;
cmode : aliased String := "w" & ASCII.nul;
file : Interfaces.C_Streams.FILEs;
Status : int;
Status2 : Integer;
begin
file := Interfaces.C_Streams.fopen (cfilename'Address, cmode'Address);
Status := fprintf (file, m, Interfaces.C.Strings.New_String (format));
Status2 := Interfaces.C_Streams.fclose (file);
return Status;
end fprintf;
function To_Ada
(c : access constant gsl_matrix)
return Ada.Numerics.Long_Real_Arrays.Real_Matrix
is
a : Ada.Numerics.Long_Real_Arrays.Real_Matrix
(1 .. Integer (c.size1), 1 .. Integer (c.size2));
begin
for i in 1 .. Integer (c.size1) loop
for j in 1 .. Integer (c.size2) loop
a (i, j) :=
Long_Float (matrix_double.get (c, size_t (i), size_t (j)));
end loop;
end loop;
return a;
end To_Ada;
function To_C
(a : Ada.Numerics.Long_Real_Arrays.Real_Matrix) return access gsl_matrix
is
cmat : access gsl_matrix;
begin
cmat := alloc (a'Length (1), a'Length (2));
for i in 1 .. a'Length (1) loop
for j in 1 .. a'Length (2) loop
set (cmat, size_t (i), size_t (j), double (a (i, j)));
end loop;
end loop;
return cmat;
end To_C;
end gsl.matrix_double;