------------------------------------------------------------------------------------------ -- Auteur : Normand Seguin -- Date : Aout 2001 -- Sujet : Module GENERIQUE de specification des operations de base sur -- le type abstrait file -- Notes : -- - Type prive -- - Type de l'element est determine (generique) au moment de l'instanciation -- - Nombre d'elements dans la file egalement generique ------------------------------------------------------------------------------------------ GENERIC -- Parametres du module Type Type_Element IS Private; -- Le client peut assigner tous les types a type_element WITH PROCEDURE AfficherElement(e : Type_Element); -- ** Callback pour afficher un élément de la file ** AfficherModifs : Boolean := False; -- ** Afficher ou non la file à la fin d'un appel à Défiler ou Enfiler (par défaut, on n'affiche pas) ** Max_Element : Natural := 100; -- Le nombre d'elements est parametrise (defaut = 100) PACKAGE File_G IS TYPE File IS Limited Private; -- Type prive (nom publique, definition privee) -- Declarations des operations sur la File PROCEDURE Creer_File (F : OUT File); -- Initialiser la File a vide FUNCTION File_Vide (F : IN File) RETURN Boolean; -- Verification si la file contient des elements FUNCTION Premier (F : IN File) RETURN Type_Element; -- Retourne la valeur du premier element de la File -- l'erreur Erreur_File_Vide sera levee si la file est vide PROCEDURE Enfiler (F : IN OUT File; Element : IN Type_Element); -- Ajouter un element a la file -- l'erreur Erreur_File_Pleine peut etre levee si Max_Element est atteint PROCEDURE Defiler (F : IN OUT File; Element : OUT Type_Element); -- Retourner l'element au debut de la file et le retirer de la file -- l'erreur File_Vide sera levee si la file est vide PROCEDURE Detruire_File (F : IN OUT File); -- Detruire la file -- Copier_File -- Description : Permet de créer une file qui est une copie exacte d'une autre file. -- Entrées : - src -> File à copier. -- Sorties : - dst -> Nouvelle file qui est une copie de la file 'src'. -- Retour : N/A -- Pré : Aucune. -- Post : - La file 'dst' est une réplique exacte de la file 'src' -> Comparer_Files(src, dst) = vrai. PROCEDURE Copier_File(src : File; dst : OUT File); -- Comparer_Files -- Description : Permet de déterminer si deux files sont égales. Deux files sont égales ssi elles contiennent le même nombre -- d'éléments et tous les éléments sont identiques. -- Entrées : - f1 -> Première file. -- Sorties : - f2 -> Seconde file. -- Retour : Vrai si les files sont identiques, faux sinon. -- Pré : Aucune. -- Post : Aucune. FUNCTION Comparer_Files(f1, f2 : File) RETURN Boolean; Erreur_File_Pleine : Exception; -- Si le nombre maximum d'element est atteint Erreur_File_Vide : Exception; -- Si on effectue une operation interdite sur une file vide PRIVATE -- Definition du type prive File SUBTYPE T_Index IS Natural Range 0..Max_Element; -- Sous-type pour la gestion du tableau TYPE Tableau IS Array (1..Max_Element) Of Type_Element; TYPE File IS Record -- Definition du type File Fin : T_Index := 0; Tab : Tableau; End Record; END File_G;