Paquetage générique de gestion d'une liste de symboles
spécification du paquetage générique liste_symbole
generic
type T is private;
package liste_symbole is
liste_vide:exception;
type Liste is private;
function estVide(l:Liste) return
Boolean;
function vide return Liste;
procedure insererEnQueue(e:in
T;l:in out Liste); -- insertion de l'élément e en queue de
liste
procedure extraire(l:in out
Liste;e:out T); -- l'élément e extrait de la liste est l'élément
de tête
private
type Cellule;
type Liste is access Cellule;
type Cellule is
record
valeur:T;
suivant:Liste;
end record;
end liste_symbole;
corps du paquetage générique liste_symbole
with Ada.Text_io;use Ada.Text_io;
package body liste_symbole is
function estVide(l:Liste) return
Boolean is
begin
return l=NULL;
end estVide;
function vide return Liste is
begin
return NULL;
end vide;
procedure insererEnQueue(e:in
T;l:in out Liste) is
curseur:Liste:=l;
begin
if estVide(l) then l:=new Cellule'(e,NULL);
else
loop
exit when curseur.suivant=NULL;
curseur:=curseur.suivant;
end loop;
curseur.suivant:=new
Cellule'(e,NULL);
end if;
end insererEnQueue;
procedure extraire(l:in out Liste;e:out
T) is
begin
if estVide(l) then raise liste_vide;
else
e:=l.valeur;
l:=l.suivant;
end if;
exception
when liste_vide =>
put_line(" liste vide
: impossible d'extraire un élément !");
end extraire;
end liste_symbole;