http://www.adaconcept.com/programs/reprezentacio/unchecked_conversion_es_a_modulo_tipus_hasznalata.adb
-- Rotter Gyorgy

with Ada.Text_IO;

with Ada.Unchecked_Conversion;

with Bit_Szintu_Muveletek;


procedure unchecked_conversion_es_a_modulo_tipus_hasznalata is

   type Felsorolasi_Tipus is (A_allas, B_allas, Atmenet);

   for Felsorolasi_Tipus use (A_allas => 2#001#,
                              B_allas => 2#010#,
                              Atmenet => 2#100#);

   for Felsorolasi_Tipus'Size use 8;

   f : Felsorolasi_Tipus := A_allas;


   type Modulo_8_Tipus is mod 2**8-1;

   procedure Bitenkent_Kiir is new Bit_Szintu_Muveletek.Bitenkent_Kiir(Tipus => Felsorolasi_Tipus,
                                                                       Kiir  => Ada.Text_IO.Put'Access);


   function Felsorolasi_Tipussa_Alakit is new Ada.Unchecked_Conversion(Source => Modulo_8_Tipus,
                                                                       Target => Felsorolasi_Tipus);


   Egy   : constant Modulo_8_Tipus := 2#001#;
   Ketto : constant Modulo_8_Tipus := 2#010#;

begin
   Ada.Text_IO.Put_Line("Program indul");



   f := Felsorolasi_Tipussa_Alakit(Egy or Ketto);                                                                      -- bitenkenti or muvelet...  (a 3 nem egy "ertelmezheto ertek" !!!)

   Bitenkent_Kiir(f);
   Ada.Text_IO.New_Line;

   if f'Valid then                                                                                                     -- leelenorizzuk, hogy az f erteke ertelmezheto e
      Ada.Text_IO.Put_Line("f = " & Felsorolasi_Tipus'Image(f));
   else
      Ada.Text_IO.Put_Line("A valtozo erteke nem ertelmezheto tipusertekkent!");
   end if;



   Ada.Text_IO.Put_Line("Program vege");
end unchecked_conversion_es_a_modulo_tipus_hasznalata;