cours_ada/semestre4/cc1/files.adb
2021-08-22 13:24:45 +02:00

82 lines
2.3 KiB
Ada

with Ada.Text_Io; use Ada.Text_Io;
package body Files is
procedure Clear(F : out File) is
begin
F.Deb := 1;
-- Cette affectation n'est pas obligatoire mais
-- simplifie la compréhension
F.Nb := 0;
end Clear;
function Max_Size_Of(F: in File) return Positive is
begin
return F.Max_Size;
-- retourne le parametre de F demandé
end Max_Size_Of;
function Is_Empty(F: in File) return Boolean is
begin
return F.Nb = 0;
-- retourne TRUE si n = 0 i.e. la liste est vide
end Is_Empty;
function Size_Of(F : in File) return Natural is
begin
return F.Nb;
-- retourne le parametre de F demandé
end Size_Of;
function Head_Of(F : in File) return Integer is
begin
return F.Tab(F.Deb);
-- retourne le parametre de F demandé
end Head_Of;
procedure Insert(E : in Integer; F : in out File) is
begin
if F.Max_Size <= F.Nb then raise Full_Error; end if;
-- On compare la taille maximale avec le nombre d'élément déjà présent
-- S'il n'y a plus de place on leve un exception
F.Tab(((F.Deb + F.Nb - 1) mod F.Max_Size) + 1) := E;
-- On utilise la formule donnée danss le sujet et adaptée
F.Nb := F.Nb + 1;
end Insert;
procedure Suppress_Head(F : in out File) is
begin
if F.Nb <= 0 then raise Empty_Error; end if;
if F.Deb >= F.Tab'Last then -- Cette condiation permet un bouclage
F.Deb := F.Tab'First; -- du tableau sans problèmes:
F.Nb := F.Nb - 1; -- Cas 1 (if) : on doit boucler
else -- Cas 2 (else) : pas besoin
F.Deb := F.Deb + 1;
F.Nb := F.Nb - 1;
end if;
end Suppress_Head;
-- Procédure d'affichage de file pour les tests unitaires
-- Mise de côtée comme demandé
-- procedure Put(F : in File) is
-- -- affiche F a l'ecran
-- -- displays F on the screen
-- Pos : positive;
-- begin
-- New_Line;
-- Put_Line(Integer'Image(F.Nb)&" elements :");
-- Pos := F.Deb;
-- for I in 0..F.Nb-1 loop
-- Pos := ((F.Deb+I-1) mod F.Max_Size) +1;
-- Put_line(Integer'image(Pos)&" :" & integer'image(F.tab(Pos)));
-- end loop;
-- New_Line;
-- end Put;
end Files;