http://www.adaconcept.com/programs/reprezentacio/reprezentacio.adb
-- Rotter Gyorgy
-- Egy bevezetes a tipusok reprezentaciojahoz...

with Ada.Text_IO;

with Bit_Szintu_Muveletek;


procedure reprezentacio is
begin
   Ada.Text_IO.Put_Line("Program indul");

   A_Pack_Pragma_Hasznalata:
   declare
      type Boolean_Tomb_Tipus is array(1..10) of Boolean;
      pragma Pack(Boolean_Tomb_Tipus);                                                                       -- figyeljuk meg egy ilyen tipusu valtozo meretet, ha ezt a sort kikommentezzuk a kodbol


      b : Boolean  := False;
      Boolean_Tomb : Boolean_Tomb_Tipus:= (3 => True, others => False);


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

   begin
      Ada.Text_IO.Put_Line("A Boolean Tipus merete: "                  & Natural'Image(Boolean'Size));
      Ada.Text_IO.Put_Line("Egy Boolean tipusu valtozo merete: "       & Natural'Image(b'Size));
      Ada.Text_IO.Put_Line("Egy 10 elemu boolean tomb merete: "        & Natural'Image(Boolean_Tomb'Size));

      Bitenkent_Kiir(Boolean_Tomb);
      Ada.Text_IO.New_Line;
   end A_Pack_Pragma_Hasznalata;


   Ada.Text_IO.Put_Line((1..10 => '-'));


   Reprezentacios_Zaradekok_Hasznalata:
   declare

      type Rekord_Tipus is record
         I : Integer range 0..7;
         B : Boolean;
      end record;

      for Rekord_Tipus'Size use 4;

      for Rekord_Tipus use
         record
            I at 0 range 0 .. 2;
            B at 0 range 3 .. 3;
         end record;

      R : Rekord_Tipus := (I => 3 , B => True);


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

   begin
      Ada.Text_IO.Put_Line("A Rekord_Tipus merete: " & Natural'Image(Rekord_Tipus'Size));

      Bitenkent_Kiir(R);
      Ada.Text_IO.New_Line;
   end Reprezentacios_Zaradekok_Hasznalata;


   Ada.Text_IO.Put_Line((1..10 => '-'));


   declare
      type Felsorolasi_Tipus is (A_allas, B_allas, Atmenet);

      for Felsorolasi_Tipus use (A_allas => 1, B_allas => 2, Atmenet => 4);                                  -- figyeljuk meg, hogy nem adtuk meg a tipus meretet!

      f : Felsorolasi_Tipus := A_allas;


      procedure Bitenkent_Kiir is new Bit_Szintu_Muveletek.Bitenkent_Kiir(Tipus => Felsorolasi_Tipus,
                                                                          Kiir  => Ada.Text_IO.Put'Access);
   begin
      Ada.Text_IO.Put_Line("A Felsorolasi_Tipus merete: " & Natural'Image(Felsorolasi_Tipus'Size));
      Ada.Text_IO.Put_Line("f = " & Felsorolasi_Tipus'Image(f));

      Bitenkent_Kiir(f);
      Ada.Text_IO.New_Line;
   end;



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