ads:
package Airlines_Package is
type Airlines( Size: Positive ) is limited private;
procedure Init( P: out Airlines );
procedure AssignName( P: in out Airlines; Index: in Positive; Name: in String );
procedure InsertFlight( P: in out Airlines; From, To: in String );
private
type Matrix is array ( Integer range <>, Integer range <>) of Boolean;
type NamesArray is array ( Integer range <> ) of String(1..10);
type Airlines( Size: Positive ) is record
Names: NamesArray( 1..Size ) := (others => " ");
Flights: Matrix( 1..Size, 1..Size );
end record;
end Airlines_Package;
adb:
with Ada.Text_IO, Ada.Integer_Text_IO;
package body Airlines_Package is
procedure Init( P: out Airlines ) is
begin
for I in 1..P.Size loop
for J in 1..P.Size loop
if I = J then
P.Flights(I, J) := True;
else
P.Flights(I, J) := False;
end if;
end loop;
end loop;
end;
procedure AssignName( P: in out Airlines; Index: in Positive; Name: in String ) is
begin
declare
Max: Positive;
begin
Max := Name'Last;
if Max > 10 then
Max := 10;
end if;
for I in 1..Max loop
P.Names(Index)(I) := Name(Name'First + I - 1);
end loop;
end;
end;
procedure InsertFlight( P: in out Airlines; From, To: in String ) is
begin
declare
FromIndex, ToIndex: Integer := -1;
begin
for I in 1..P.Size loop
if P.Names(I) = From then
FromIndex := I;
elsif P.Names(I) = To then
ToIndex := I;
end if;
end loop;
if( ( FromIndex /= -1 ) and ( ToIndex /= -1 ) ) then
P.Flights(FromIndex, ToIndex) := True;
P.Flights(ToIndex, FromIndex) := True;
Ada.Text_IO.Put_Line("Ok!");
end if;
Ada.Integer_Text_IO.Put(FromIndex);
Ada.Integer_Text_IO.Put(ToIndex);
end;
end;
end Airlines_Package;
main:
with Ada.Text_IO, Ada.Integer_Text_IO, Airlines_Package;
use Ada.Text_IO, Ada.Integer_Text_IO, Airlines_Package;
procedure Main is
Q: Airlines(3);
L: String(1..10) := " ";
begin
Init( Q );
AssignName( Q, 1, "Wien" );
AssignName( Q, 2, "London" );
AssignName( Q, 3, "Prague" );
InsertFlight( Q, "Prague", "London" );
end Main;
running:
nagyz@platoon:~/ada$ gnatmake main
gcc-4.1 -c airlines_package.adb
gnatbind -x main.ali
gnatlink main.ali
nagyz@platoon:~/ada$ ./main
-1 -1
nagyz@platoon:~/ada$