http://www.adaconcept.com/programs/ontozorendszeres_szimulacio/szimulacio-ontozorendszer-terv.ads
package Szimulacio.Ontozorendszer.Terv is
   pragma Elaborate_Body;                                                                                         -- Elofordulhat, hogy elaboracios idoben is hasznaljak majd a csomagot

   -- egyke csomag

   subtype Reszletpont_Azonosito_Tipus        is Integer range Reszletpontok'First - 1 .. Reszletpontok'Last;     -- egyel tobb azonositot tartalamz, mint ahany reszletpont van (Emlekezteto: alulcsordulas / tulcsordulas) :)

   subtype Valodi_Reszletpont_Azonosito_Tipus is Integer range Reszletpontok'First .. Reszletpontok'Last;

   type Terv_Tipus is array(Valodi_Reszletpont_Azonosito_Tipus) of Reszletpont_Azonosito_Tipus;

   type Cso_Csatlakozasok_Tomb_Tipus is array(Natural range <>) of Valodi_Reszletpont_Azonosito_Tipus;


   function Cso_Csatlakozasok return Terv_Tipus;

   function Cso_Csatlakozasok(VR : Valodi_Reszletpont_Azonosito_Tipus) return Cso_Csatlakozasok_Tomb_Tipus;

   function Vizforrastol_Mert_Tavolsag(VR : Valodi_Reszletpont_Azonosito_Tipus) return Natural;

private

   -- a Prim algoritmushoz

   Nincs_Szulo : constant Reszletpont_Azonosito_Tipus := Reszletpont_Azonosito_Tipus'First;                       -- ezert kellett az egyel tobb reszletpont ("extremalis ertek")

   --

   Maximalis_Elsuly : constant := 1;                                                                              -- "nem sulyozott a graf", csak a szomszedsagi kapcsolatok fontosak

   Vegtelen_Elsuly : constant := Maximalis_Elsuly + 1;

   type Elsuly_Tipus is new Natural            range 0 .. Vegtelen_Elsuly;

   subtype Valodi_Elsuly_Tipus is Elsuly_Tipus range 0 .. Maximalis_Elsuly;

   --


   Szomszedsagi_Matrix : array(Valodi_Reszletpont_Azonosito_Tipus, Valodi_Reszletpont_Azonosito_Tipus) of Valodi_Elsuly_Tipus := ( others => ( others => Elsuly_Tipus'First ));

   Kesz_Tomb : array(Valodi_Reszletpont_Azonosito_Tipus) of Boolean;


   D : array(Valodi_Reszletpont_Azonosito_Tipus) of Elsuly_Tipus;
   P : Terv_Tipus;


   procedure Szomszedsagi_Matrix_Inicializalasa(Szogpontok : Reszletpont_Tomb_Tipus);

   function Gyoker(Szogpontok : Reszletpont_Tomb_Tipus) return Valodi_Reszletpont_Azonosito_Tipus;

   procedure Prim(Start_Csucs : Valodi_Reszletpont_Azonosito_Tipus);

   function Gyokertol_Mert_Tavolsag(VR : Valodi_Reszletpont_Azonosito_Tipus) return Natural;

end Szimulacio.Ontozorendszer.Terv;