http://www.adaconcept.com/programs/ontozorendszeres_szimulacio/szimulacio-ontozorendszer-elemek-szorofej.adb
with Ada.Text_IO;

with Szimulacio.Ontozorendszer.Megjelenito.Muveletek;

with System.Address_Image;                                                                                             -- Megfigyeleshez / teszteleshez

package body Szimulacio.Ontozorendszer.Elemek.Szorofej is

   package Megjelenito_Muveletek renames Szimulacio.Ontozorendszer.Megjelenito.Muveletek;


   function Megjelenit(Objektum : Szorofej_Tipus) return Megjelenito.String_Tomb_Tipus is
   begin
      return (01 => Megjelenito_Muveletek.Stringbe_Masol("Aktiv: " & Boolean'Image(Objektum.Szor)));
   end Megjelenit;


   procedure Inicializal (Objektum : in out Szorofej_Tipus) is
   begin
      -- a nezeti konverzio nem hoz letre objektumot, figyeljuk meg a cimeket
      Ada.Text_IO.Put_Line("Szorofej inicializalas");
      Ada.Text_IO.Put_Line("Az Objektum cime konvertalas elott: " & System.Address_Image(Objektum'Address));
      Ada.Text_IO.Put_Line("Az Objektum cime konvertalas utan:  " & System.Address_Image(Megjelenitheto_Absztrakt_Tipus(Objektum)'Address));


      Megjelenito_Muveletek.Regisztral("Szorofej: ", Megjelenitheto_Absztrakt_Tipus(Objektum)'Unchecked_Access);

   end Inicializal;


   procedure Frissit (Objektum : in out Szorofej_Tipus) is
     use type Modell.Cso_Allapot_Tipus;

   begin
      -- NAGYON FONTOS TERVEZESI ELV! + [*]
      -- Fontos a "masolas", kulonben az utemezese elromolhat a szimulatornak...
      -- ...elofordulhatna, hogy egy iteracioval korabban ertesulnenek a hasznalo kodok arrol, hogy szor -e az Objektum vagy nem
      case Objektum.Csovezetek_Elem.all is
         when Modell.Van_Benne_Viz => Objektum.Szor := True;
         when Modell.Ures          => Objektum.Szor := False;
      end case;
   end Frissit;


   function Beallit(Azonosito : Terv.Valodi_Reszletpont_Azonosito_Tipus;
                    Vizforrastol_Mert_Tavolsag : Natural;
                    Csovezetek_Elem : Modell.Csovezetek_Modell_Elem_Mutato_Tipus) return Szorofej_Tipus is
   begin
      return (Frissitheto_Absztrakt_Tipus with
              Azonosito => Azonosito,
              Vizforrastol_Mert_Tavolsag => Vizforrastol_Mert_Tavolsag,
              Csovezetek_Elem => Csovezetek_Elem,
              Szor => False);
   end Beallit;


   function Szor(Objektum : Szorofej_Tipus) return Boolean is
   begin
      return Objektum.Szor;                                                                                            -- [*] rendkivul fontos, hogy itt ne kozvetlenul a Modell-bol ("osztott memoriabol") olvassunk
   end Szor;


end Szimulacio.Ontozorendszer.Elemek.Szorofej;