98 lines
3 KiB
Ada
98 lines
3 KiB
Ada
|
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;
|