TP-programmation-imperative/td08/listes.ads
2023-06-10 21:03:54 +02:00

98 lines
3 KiB
Ada
Executable file

generic
type T_Element is private;
package Listes is
type T_Liste is limited private;
Indice_Error: Exception; -- Un indice est invalide
Element_Absent_Error: Exception; -- Élément non trouvé
-- Initialiser une liste.
procedure Initialiser (Liste: out T_Liste);
-- Détruire une liste et libérer toutes les ressources qu'elle utilise.
-- Une liste détruite ne doit plus être utilisée.
procedure Detruire (Liste: in out T_Liste);
-- Ajouter un nouvel élément au début d'une liste.
procedure Ajouter_Debut (Liste: in out T_Liste; Element: T_Element);
-- Retourner le premier élément d'une liste.
-- Exception : Element_Absent_Error si la liste est vide
function Premier (Liste: in T_Liste) return T_Element;
-- Retourner la taille d'une liste.
function Taille (Liste: in T_Liste) return Integer;
-- Afficher les éléments d'une liste en révélant la structure interne.
-- Par exemple : -->[1]-->[3]-->[1]-->[2]--E
--! Cette opération serait plutôt utilisée à des fin de mise au point et
--! pourrait rester locale au module. Pour l'utilisateur du module
--! une procédure qui affiche [1, 3, 1, 2] serait plus utile.
generic
with procedure Afficher_Element (Element: in T_Element);
procedure Afficher (Liste: in T_Liste);
-- Retourner vrai ssi Element est dans Liste.
function Est_Present (Liste: in T_Liste; Element: in T_Element) return Boolean;
-- Suppprimer la première occurrence de Element dans Liste.
-- Exception : Element_Absent_Error si l'élément n'est pas trouvé.
procedure Supprimer (Liste: in out T_Liste; Element: in T_Element);
-- Insérer un nouvel élément (Nouveau) dans la liste (Liste) après un
-- élément existant (Element).
-- Exception : Element_Absent_Error si Element n'est pas dans la liste
procedure Inserer_Apres (Liste: in out T_Liste; Nouveau, Element: in T_Element);
-- Retourner l'élément à la position Indice dans la Liste.
-- Le premier élément est à l'indice 0.
-- Exception : Indice_Error si l'indice n'est pas valide
function Ieme (Liste: in T_Liste; Indice: in Integer) return T_Element;
-- Supprimer l'élément à la position Indice dans la Liste.
-- Le premier élément est à l'indice 0.
-- Exception : Indice_Error si l'indice n'est pas valide
procedure Supprimer_Ieme (Liste: in out T_Liste; Indice: in Integer);
-- Procédure de test de la liste.
generic
Un, Deux, Trois : T_Element; -- Trois éléments différents
with procedure Afficher_Element (Element: in T_Element);
procedure Tester;
private
type T_Cellule;
type T_Liste is access T_Cellule;
type T_Cellule is
record
Element: T_Element;
Suivante: T_Liste;
end record;
function Cellule_Contenant (Element: T_Element; Liste: in T_Liste) return T_Liste with
Post => Cellule_Contenant'Result /= null
and then Cellule_Contenant'Result.all.Element = Element;
--! Spécifier ici, dans la partie private, ce sous-programme n'est
--! pas accessible des utilisateurs du module mais le sera de tous
--! sous-programme du corps du module.
end Listes;